Я хочу использовать инструкцию cpuid для определения характеристик процессора Intel. Я нашел заголовок cpuid.h в Kernel.framework, поэтому добавил Kernel.framework в свой проект и включил <Kernel/i386/cpuid.h>
в исходный файл. Это произвело
kern/kern_types.h: No such file or directory
чего я не понимаю. Но функция do_cpuid
, которую, я думаю, я хочу использовать, определена встроенно, поэтому я попытался просто скопировать ее в свой исходный код.
static inline void
do_cpuid(uint32_t selector, uint32_t *data)
{
asm("cpuid"
: "=a" (data[0]),
"=b" (data[1]),
"=c" (data[2]),
"=d" (data[3])
: "a"(selector));
}
Это дало мне ошибки:
error: can't find a register in class 'BREG' while reloading 'asm'
error: 'asm' operand has impossible constraints
Поиск этой ошибки в Google привел меня к этому вопросу: asm">Проблема на Mac: не удается найти регистр в классе BREG при перезагрузке asm
Но решение этого вопроса заключалось в использовании параметра dynamic-no-pic (настройка сборки GCC_DYNAMIC_NO_PIC
), а в справке Xcode по настройкам сборки говорится: «Не подходит для общих библиотек (которые должны быть независимыми от позиции)». Я создаю фреймворк, который, как мне кажется, считается общей библиотекой. Итак, как я могу заставить это работать?