我最近正在为osx 10.9编写一个内核模块,并发现我编译的最终二进制文件中的每个符号都是由nm工具定义的。
如何通过在构建设置中指定标志来完成?我的意思是,当您构建用户模式应用程序时,如果符号未解析,则无法正确链接。我无法在构建kext二进制文件的命令行中找到任何相关的标志。
刚出于愚蠢,这个标志告诉链接器任何未定义的符号都可以吗?我知道--unresolved-symbols标志,但在构建命令行中找不到它。
此外,我如何直接链接到mach_kernel?因为我刚看到一个osx 10.5的驱动程序链接到macho。或者它是否只能在过去?
答案 0 :(得分:3)
为kext完成此操作的标志是-Xlinker -kext
,它还包含选项-nostdlib
,因为基本标准库不可用于kext。这些规则告诉OSX链接器,它不需要解析生成的二进制文件中的所有符号。
你没有直接链接到内核,你依赖于在kext加载时而不是在任何其他时间连接的未定义符号。