c++ - Kext 编译良好,符号未定义

标签 c++ macos clang kernel-extension

我最近正在为 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/

相关文章:

php - 如何使用 SWIG 在 OS X 上编译 PHP 扩展

c - Xcode/clang 包含错误的文件

c++ - Visual Build (kinook) 如何构建 C++ 项目?

c++ - 为什么我的 C++ 程序中会出现死循环?

c++ - 计算多个 std::bitset<N> 中出现 1 的最快方法?

cocoa - 您如何更改核心文本中的字母间距/跟踪?

python - 无法在 OSX 10.11 El Capitan 上安装 virtualenvwrapper

c - 允许与 Throw The Switch 的 Unity 单元测试框架进行双浮点比较

c++ - qt 5.4/clang:体系结构 x86_64 的 undefined symbol (std::istream::gcount())

c++ - 您可以将 QReal 数字转换为 float 吗?