这是我得到的具体错误:
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应该在某处以不同的方式定义,因为它是一个外部变量吗?如果这个问题太具体,我会将其删除。但也许有人的直觉会帮助我。
答案 0 :(得分:4)
[编辑]
在某处添加变量的定义(不含extern
)。没有初始值设定项的外部标识符不是定义 - 定义必须在其他地方。
答案 1 :(得分:1)
要使extern
ly 声明的符号在符号表中显示为“未定义”,您实际上应该从库中使用。
如果您的目标文件既不包含符号的定义(与声明相对),也不在其函数内的某处使用它,则该符号不会出现在符号表中。为什么要这样?