我最近正在为 osx 10.9 编写一个内核模块,发现我编译的最终二进制文件中的每个符号都未被 nm 工具定义。
如何通过在build设置中指定标志来完成此操作?我的意思是,当您构建用户模式应用程序时,当它有未解析的符号时,它无法正确链接。我在构建 kext 二进制文件的命令行中找不到任何相关标志。
出于好奇,这个告诉链接器任何 undefined symbol 都可以的标志在哪里?我知道 --unresolved-symbols 标志,但在构建命令行中找不到它。
此外,如何直接链接到 mach_kernel?因为我刚刚看到一个 osx 10.5 的驱动程序,它链接到 macho。还是只有在过去才有可能?
最佳答案
为 kext 完成此操作的标志是 -Xlinker -kext
,它还包含选项 -nostdlib
,因为基本标准库不可用于 kext 。这些规则告诉 OSX 链接器它不需要解析生成的二进制文件中的所有符号。
您不直接链接到内核,您依赖于在 kext 加载时而不是在任何其他时间连接的 undefined symbol 。
关于c++ - Kext 编译良好,符号未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26155005/