对象文件不包含应该存在的符号

时间:2009-10-01 20:59:23

标签: c++ com

这是我得到的具体错误:

libFoo.so: undefined reference to `IID_IFOOBAR'
collect2: ld returned 1 exit status
make: *** [/home/F.exe] Error 1

当我尝试检查目标文件A.o

中的符号时
nm A.obj | grep IID_

我的“IID_IFOOBAR”目标文件中没有列出符号,因为它在头文件中被定义为:

extern const blahType IID_IFOOBAR

我错过了什么吗? IID_IFOOBAR应该在某处以不同的方式定义,因为它是一个外部变量吗?如果这个问题太具体,我会将其删除。但也许有人的直觉会帮助我。

2 个答案:

答案 0 :(得分:4)

[编辑] 在某处添加变量的定义(不含extern)。没有初始值设定项的外部标识符不是定义 - 定义必须在其他地方。

答案 1 :(得分:1)

要使extern ly 声明的符号在符号表中显示为“未定义”,您实际上应该从库中使用

如果您的目标文件既不包含符号的定义(与声明相对),也不在其函数内的某处使用它,则该符号不会出现在符号表中。为什么要这样?