2014-10-02 34 views
1

我最近爲osx 10.9編寫了一個內核模塊,發現我編譯的最終二進制文件中的每個符號都是nm工具未定義的。Kext編譯好符號undefined

如何通過在構建設置中指定標誌來完成?我的意思是,當您構建用戶模式應用程序時,如果符號未解決,則無法正確鏈接。我不能在構建kext二進制文件的命令行中找到任何相關的標誌。

剛剛出來的cuirosity,這個標誌告訴鏈接器的任何未定義的符號是好的?我知道--unresolved-symbols標誌,但它在構建命令行中找不到。

此外,如何直接與mach_kernel鏈接?因爲我剛剛看到一個與男子氣概相關的osx 10.5驅動程序。還是隻有在過去纔有可能?

回答

2

完成kext的標記是-Xlinker -kext,它還包含選項-nostdlib,因爲基準標準庫對kext不可用。這些規則告訴OSX鏈接器它不需要解析生成的二進制文件中的所有符號。

不要直接鏈接到內核,你依賴未定義的符號在kext加載時間而不是在任何其他時間連接。

+0

感謝您的回答。 XBinary從osx書中有一個kext與男子氣概(mach_kernel)的鏈接。 http://www.osxbook.com/software/xbinary/這是爲OSX 10.5豹。老kext鏈接直接?它沒有提供源,所以我沒有什麼可以挖掘的。 – jay 2014-10-02 10:30:16

+1

在64位中,界面已經發生了很大的變化,所以我相信(但是可以糾正),你不能直接鏈接到它。您還需要在kext的info.plist的'OSBundleLibraries'鍵中定義您使用的內核編程接口。您可以通過在構建的kext上運行'kextlibs'來確定這一點。 – Petesh 2014-10-02 11:07:54