Kext编译良好,符号未定义

时间:2014-10-02 05:39:36

标签: c++ macos clang kernel-extension

我最近正在为osx 10.9编写一个内核模块,并发现我编译的最终二进制文件中的每个符号都是由nm工具定义的。

如何通过在构建设置中指定标志来完成?我的意思是,当您构建用户模式应用程序时,如果符号未解析,则无法正确链接。我无法在构建kext二进制文件的命令行中找到任何相关的标志。

刚出于愚蠢,这个标志告诉链接器任何未定义的符号都可以吗?我知道--unresolved-symbols标志,但在构建命令行中找不到它。

此外,我如何直接链接到mach_kernel?因为我刚看到一个osx 10.5的驱动程序链接到macho。或者它是否只能在过去?

1 个答案:

答案 0 :(得分:3)

为kext完成此操作的标志是-Xlinker -kext,它还包含选项-nostdlib,因为基本标准库不可用于kext。这些规则告诉OSX链接器,它不需要解析生成的二进制文件中的所有符号。

没有直接链接到内核,你依赖于在kext加载时而不是在任何其他时间连接的未定义符号。