Петя
Имел ли кто опыт работы с cmake + ninja + clang для c/c++? Понимаю, что чат не про это, но в чате по плюсам никаких советов не получил
disba1ancer
disba1ancer
disba1ancer
Петя
CMake выдает фатальную ошибку, мол clang не может собрать тестовый файл, хотя вручную собирает
disba1ancer
Петя
disba1ancer
Петя
Если юзать msvc, то все ок, с clang проблема
Петя
или про что?
disba1ancer
Петя
disba1ancer
А симейку точно нужно родительский каталог скармливать?
disba1ancer
Петя
а, ну да, но разницы нет, это как с .vc, просто удаляешь и ничего не ломается, а если на гит грузить, то в gitignore прописываешь
disba1ancer
Петя
можно, но я через cd сделал
Петя
типа создаю папку build и дальше в нее перехожу
Петя
и от туда cmake вызываю
disba1ancer
Петя
раньше сам билдел, потом понял, что можно уже скомпилированную версию скачать, скачал, установил, прописал пути и все
Петя
если вручную вызвать clang++ test.cpp + flags, то он соберет, а через cmake не хочет, не может тест собрать
Петя
Петя
в тулсах скрипты для сборки, чтобы не вводить каждый раз cmake blablabla
disba1ancer
Петя
в тулзах
disba1ancer
disba1ancer
Петя
и дело не в точке, вообще мимо, я же писал, что если отдать не clang, а msvc(чтобы cmake сгенерировал под visual studio), то все правильно работает, а если clang, то cmake пытается скомпилировать свои тестовые файлы, аля проверить, что компилятор работает, и у него не получается, вылетает фатал еррор, если clang'у вручную скормить исходники, то все работает
disba1ancer
и дело не в точке, вообще мимо, я же писал, что если отдать не clang, а msvc(чтобы cmake сгенерировал под visual studio), то все правильно работает, а если clang, то cmake пытается скомпилировать свои тестовые файлы, аля проверить, что компилятор работает, и у него не получается, вылетает фатал еррор, если clang'у вручную скормить исходники, то все работает
Так как ты шланг поставил?
Петя
https://github.com/llvm/llvm-project/releases/tag/llvmorg-14.0.6 - офф релиз, скачал LLVM-14.0.6-win64.exe
Петя
это инсталлер, который все ставит сам
Петя
disba1ancer
Это называется кроссплатформенность?
disba1ancer
Эти переменные должен юзер задавать, который собирает всю эту дрянь
Петя
ясен пень, суть не в хардкоде, а в том, что не собирается даже так
disba1ancer
Флаги кроме -Wall вообще выкинь, в общем, лучше в probuildsystem перейти нам
Eugene
Хочу прочитать MBR с загрузочного диска.
H := CreateFile(PChar('\\.\PhysicalDrive' + IntToStr(DriveN)), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if (not ReadFile(H, SrcSec, SECTOR_SIZE, Ret, nil)) or (Ret <> SECTOR_SIZE) then
begin
MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Read Error', MB_OK or MB_ICONERROR);
Exit;
end;
Выдаёт: Параметр задан неверно.
Запускается из-под админа. На других дисках работает, не работает только на загрузочном.
Что не так?
s54820
Хочу прочитать MBR с загрузочного диска.
H := CreateFile(PChar('\\.\PhysicalDrive' + IntToStr(DriveN)), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if (not ReadFile(H, SrcSec, SECTOR_SIZE, Ret, nil)) or (Ret <> SECTOR_SIZE) then
begin
MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Read Error', MB_OK or MB_ICONERROR);
Exit;
end;
Выдаёт: Параметр задан неверно.
Запускается из-под админа. На других дисках работает, не работает только на загрузочном.
Что не так?
А там не может быть какой-нибудь advanced format с сектором не 512? Прочитай 4к сразу попробуй.
Eugene
Попробую на другом компе ещё, конечно...
s54820
disba1ancer
s54820
s54820
disba1ancer
disba1ancer
s54820
disba1ancer
disba1ancer
Хочу прочитать MBR с загрузочного диска.
H := CreateFile(PChar('\\.\PhysicalDrive' + IntToStr(DriveN)), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if (not ReadFile(H, SrcSec, SECTOR_SIZE, Ret, nil)) or (Ret <> SECTOR_SIZE) then
begin
MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Read Error', MB_OK or MB_ICONERROR);
Exit;
end;
Выдаёт: Параметр задан неверно.
Запускается из-под админа. На других дисках работает, не работает только на загрузочном.
Что не так?
А файл точно открылся? Может CreateFile вернул INVALID_HANDLE?
disba1ancer
Хочу прочитать MBR с загрузочного диска.
H := CreateFile(PChar('\\.\PhysicalDrive' + IntToStr(DriveN)), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if (not ReadFile(H, SrcSec, SECTOR_SIZE, Ret, nil)) or (Ret <> SECTOR_SIZE) then
begin
MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Read Error', MB_OK or MB_ICONERROR);
Exit;
end;
Выдаёт: Параметр задан неверно.
Запускается из-под админа. На других дисках работает, не работает только на загрузочном.
Что не так?
А то проверки то нету
Eugene
s54820
Есть проверка, это сокращённый код.
А я воспроизвёл! Начал читать в невыровненный буфер, и оно отлично сломалось с той же ошибкой. Теперь возникает вопрос, почему оно на PhysicalDrive1 работает.
Eugene
На другом компе всё прочиталось с загрузочного диска.
А на моём не хочет. Там Win10 и SATA (SSD), здесь Win11 и NVMe.
Х/з в чём причина. Ща попробую загрузиться с WinPE и оттуда запустить...
s54820
Eugene
Eugene
Лол! реально проблема в выравнивании была!
Спасибо 😁
Patient
flat assembler version 1.73.25 (1048576 kilobytes memory)
emulator64.inc [468] match [18]:
mov qword [rax], 'attrrtta'
processed: mov qword[rax],'attrrtta'
error: value out of range.
Что я делаю не так?
Eugene
Patient
Aiwan \ (•◡•) / _bot
ночной дозор. всем выйти из сумрака
Dan
Цифры по всем чатам прошлись
Dan
Anonymous
Dan
И то верно, разве могут быть плохими книги про асм?
Aiwan \ (•◡•) / _bot