Петя
Имел ли кто опыт работы с cmake + ninja + clang для c/c++? Понимаю, что чат не про это, но в чате по плюсам никаких советов не получил
Петя
CMake выдает фатальную ошибку, мол clang не может собрать тестовый файл, хотя вручную собирает
Петя
Петя
Если юзать msvc, то все ок, с clang проблема
Петя
Вручную как?
.\build-win32.bat из консоли
Петя
или про что?
disba1ancer
Петя
А что внутри?
выше скрин
disba1ancer
таким скриптом
А симейку точно нужно родительский каталог скармливать?
Петя
А симейку точно нужно родительский каталог скармливать?
там не родительский, там папка Build создается, и дело не в этом, если задавать msvc, то все собирается и компилируется
disba1ancer
там не родительский, там папка Build создается, и дело не в этом, если задавать msvc, то все собирается и компилируется
Мне показалось, что сорцы лежат в отдельном каталоге на том же уровне что и каталог Build
Петя
а, ну да, но разницы нет, это как с .vc, просто удаляешь и ничего не ломается, а если на гит грузить, то в gitignore прописываешь
Петя
можно, но я через cd сделал
Петя
типа создаю папку build и дальше в нее перехожу
Петя
и от туда cmake вызываю
disba1ancer
типа создаю папку build и дальше в нее перехожу
Так эта папка в родительском каталоге создаётся, кароче мне надо увидеть дерево каталогов
Петя
раньше сам билдел, потом понял, что можно уже скомпилированную версию скачать, скачал, установил, прописал пути и все
Петя
если вручную вызвать clang++ test.cpp + flags, то он соберет, а через cmake не хочет, не может тест собрать
Петя
в тулсах скрипты для сборки, чтобы не вводить каждый раз cmake blablabla
disba1ancer
в тулсах скрипты для сборки, чтобы не вводить каждый раз cmake blablabla
Симейку точку скорми, а не две. Стоп, а где скрипт лежит?
Петя
в тулзах
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
Эти переменные должен юзер задавать, который собирает всю эту дрянь
Петя
ясен пень, суть не в хардкоде, а в том, что не собирается даже так
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; Выдаёт: Параметр задан неверно. Запускается из-под админа. На других дисках работает, не работает только на загрузочном. Что не так?
­
А там не может быть какой-нибудь advanced format с сектором не 512? Прочитай 4к сразу попробуй.
Винты года так с 2006 с размером сектора в 4k. Ссд - изначально.
Eugene
А там не может быть какой-нибудь advanced format с сектором не 512? Прочитай 4к сразу попробуй.
Нет, не помогает. Вообще говоря, эмуляция 512 байт там всё равно должна быть. Во всяком случае, проги типа Paragon Hard Disk Manager видят 512-байтовые секторы.
Eugene
Попробую на другом компе ещё, конечно...
disba1ancer
А там не может быть какой-нибудь advanced format с сектором не 512? Прочитай 4к сразу попробуй.
На логические сектора это не особо влияет, там где есть mbr там скорее всего будет 512
s54820
На логические сектора это не особо влияет, там где есть mbr там скорее всего будет 512
Но попробовать стоило :) А что там ещё может быть? Выравнивание буфера, антивирус?
Eugene
На логические сектора это не особо влияет, там где есть mbr там скорее всего будет 512
Там GPT, это просто я так первый сектор обозначил. Можно попробовать прочитать какой-нибудь 1млн-й сектор.
disba1ancer
Там GPT, это просто я так первый сектор обозначил. Можно попробовать прочитать какой-нибудь 1млн-й сектор.
Емнип на винде была какая-то защита от прямого редактирования разделов через файл всего диска, и пока не очистить таблицу разделов, доступа почти не будет, но сам mbr это не затрагивало, но не исключено что раз там UEFI то ОС считает, что туда тебе лезть не зачем, либо допускает это только для подписанного бинарника
disba1ancer
А там не может быть какой-нибудь advanced format с сектором не 512? Прочитай 4к сразу попробуй.
А ещё у него там обычный буфферизированный доступ потому о размере сектора можно не парится
s54820
А ещё у него там обычный буфферизированный доступ потому о размере сектора можно не парится
Нет. Я точно помню, что если читать не кратное 512, то будет ошибка.
disba1ancer
Нет. Я точно помню, что если читать не кратное 512, то будет ошибка.
Это, емнип, как и для обычных файлов если работаешь с no_buffering
Eugene
А то проверки то нету
Есть проверка, это сокращённый код.
s54820
Есть проверка, это сокращённый код.
А я воспроизвёл! Начал читать в невыровненный буфер, и оно отлично сломалось с той же ошибкой. Теперь возникает вопрос, почему оно на PhysicalDrive1 работает.
Eugene
На другом компе всё прочиталось с загрузочного диска. А на моём не хочет. Там Win10 и SATA (SSD), здесь Win11 и NVMe. Х/з в чём причина. Ща попробую загрузиться с WinPE и оттуда запустить...
s54820
А по какой границе его нужно выравнивать?
У меня начинает работать с выравниванием на 4. А сколько по-нормальному нужно, я не знаю.
Eugene
Посмотри ещё RtlGetLastNtStatus, там может будет поточнее ошибка.
0xC000000D STATUS_INVALID_PARAMETER Службе или функции передан неверный параметр. 😂
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
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. Что я делаю не так?
Пишешь в память 8-байтное значение :) В память можно писать только 8-байтный регистр вроде бы (точно не помню, но кажется так), либо значение до dword вкл.
Aiwan \ (•◡•) / _bot
ночной дозор. всем выйти из сумрака
Dan
Цифры по всем чатам прошлись
­
Anonymous
Цифры по всем чатам прошлись
Книгу по асму репостнуть можно?
Dan
И то верно, разве могут быть плохими книги про асм?
Aiwan \ (•◡•) / _bot
Книгу по асму репостнуть можно?
а вдруг она уже есть тут?
Anonymous
а вдруг она уже есть тут?
С большой вероятностью 😒
Aiwan \ (•◡•) / _bot
С большой вероятностью 😒
на какую букву она начинается?