我想知道是否有一种有效的技术来解决gcc中的未定义符号问题。有时我的项目链接失败,通常我会花费很多时间来查找原因。通常是深藏在makefile中的拼写错误、不正确的环境变量或类似的问题。如果您的构建突然出现“未定义符号”,而且原因不明显,那么您会使用什么方法?
我想知道是否有一种有效的技术来解决gcc中的未定义符号问题。有时我的项目链接失败,通常我会花费很多时间来查找原因。通常是深藏在makefile中的拼写错误、不正确的环境变量或类似的问题。如果您的构建突然出现“未定义符号”,而且原因不明显,那么您会使用什么方法?
这是我的起始配置:
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
bar.o: In function `baz()':
bar.cpp:(.text+0xd): undefined reference to `Foo::bar()'
collect2: ld returned 1 exit status
$ grep 'Foo.*bar' *.o *.lib *.so
Binary file bar.o matches
Binary file foo.o matches
然后我使用 nm
工具检查每个目标文件,以确定是否缺少或已实现该符号。
$ nm foo.o
00000000 T _ZN3Foo3barEv
$ nm bar.o
00000000 T _Z3bazv
U _ZN3Foo3barEv
U __gxx_personality_v0