Недавно я писал модуль ядра для osx 10.9 и обнаружил, что каждый символ в окончательном скомпилированном мной двоичном файле не определен инструментом nm.
Как это сделать, указав флаги в настройках сборки? Я имею в виду, что когда вы создаете приложение в пользовательском режиме, оно не может быть правильно связано, если у него есть символы, которые не были разрешены. Я не могу найти какие-либо связанные флаги в командной строке для создания двоичного файла kext.
Просто из случайности, где этот флаг, который сообщает компоновщику, что все неопределенные символы в порядке? Я знаю флаг —unresolved-symbols, но он не найден в командной строке сборки.
Кроме того, как я могу связать напрямую с mach_kernel? Потому что я только что увидел драйвер OSX 10.5, который связан с Macho. Или это возможно только в старые времена?
Флаг, который выполняет это для kext, является -Xlinker -kext
также включает в себя опцию -nostdlib
потому что базовая стандартная библиотека не доступна для kext. Эти правила сообщают компоновщику OSX, что ему не нужно разрешать все символы в полученном двоичном файле.
Вы не связываясь напрямую с ядром, вы полагаетесь на то, что неопределенные символы подключаются во время загрузки kext, а не в любое другое время.