3

我使用 IDE WindRiver Workbench 编译 DKM 项目!它编译成功。但是“ld”命令失败,抱怨如下:

Warning: module 0x1e2f0b8 holds reference to undefined symbol __GOTT_BASE__.
Warning: module 0x1e2f0b8 holds reference to undefined symbol __GOTT_INDEX__.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Assert.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Stoul.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Getpctype.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Stderr.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Getptoupper.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Getptolower.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Stod.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Flt.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Stdout.
ld(): error loading file (errno = 0xe0005).
4

1 回答 1

6

您会收到这些错误,因为在系统符号表中无法解析提到的符号。

来自 VxWorks Kernel Programmer's Guide 6.8,ch。16.3.7(对于加载问题非常有用的章节)

系统符号表用于存储系统中已安装的函数和变量的名称和地址。这样做的副作用是,一旦在系统符号表中安装了符号,它们就可用于将来被加载的任何模块进行链接。此外,当尝试解析模块中的未定义符号时,加载器使用编译到目标映像中的所有全局符号,以及先前加载的模块的所有全局符号。

提示:

  • 检查您加载模块的顺序是否正确。如果您随后在另一个 DKM 中加载符号,则在该 DKM 上加载将失败。

[...] 加载模块时必须考虑模块之间的依赖关系,以确保可以使用编译到 VxWorks 映像中的代码或已加载到系统中的模块来解析每个新模块的引用。不这样做会导致不完全解析的代码 [...]

  • “lkup”命令可用于查找先前已加载的符号
于 2013-05-13T11:12:05.213 回答