【发布时间】:2014-07-28 11:51:53
【问题描述】:
我有一个需要使用 Xcode 与内核驱动程序链接的程序集文件。 为此,我使用 'ar rc' 命令制作了一个 .a 文件并将其添加到我的 Xcode 项目 @'Link binary with libraries'。构建成功。我有一个名为 f 的全局函数(在我的程序集文件中),我从一个 cpp 文件中调用它,该文件具有该函数的前向声明。
// bar.cpp
void f();
...
f();
函数的定义位于前面提到的asm文件中:
global _f
_f:
...
ret
当我尝试使用 'kextload' 执行 kext 时,我收到以下错误:
(kernel) kxld[com.apple.dts.driver.SimpleDriver]: The following symbols are unresolved for this kext:
(kernel) kxld[com.apple.dts.driver.SimpleDriver]: __Z9fy <---- that is probably the function f
(kernel) Can't load kext com.apple.dts.driver.SimpleDriver - link failed.
(kernel) Failed to load executable for kext com.apple.dts.driver.SimpleDriver.
(kernel) Kext com.apple.dts.driver.SimpleDriver failed to load (0xdc008016).
(kernel) Failed to load kext com.apple.dts.driver.SimpleDriver (error 0xdc008016).
Failed to load SimpleDriver.kext - (libkern/kext) link error.
当我在之前创建的 .a 文件上使用“nm”命令时,我收到以下输出:
..
00000000000002e9 t somefunction
0000000000000119 t somefunction
0000000000000242 t somefunction
0000000000000293 T f
0000000000000006 t somefunction
00000000000003cf t somefunction
..
- “somefunction”一词用于表示对问题不重要的函数 -
如您所见,f 函数在这里并标有“T”,表示它是一个全局函数。但是 kextload 似乎仍然无法解决它。
【问题讨论】:
标签: xcode macos kernel static-libraries nasm