嗨,我一直在寻找有关链接错误的主题-错误::对XXX的未定义引用
我的代码在SUSE上编译,但不能在REDHAT上编译,如果有人可以向我展示一些内容,请多谢。我没有发现其他职位与我的情况特别匹配(也许我错过了),有一个职位非常接近(Linking with dynamic library with dependencies)。我尝试过,但是仍然碰到了石头。
背景: 我有一个使用parent.cpp的child.cpp,所以我在child.cpp中包含了parent.h
父级中的符号(XXX)包含在libA.so中
>> nm -C libA.so | egrep XXX
000000000013eb0 T NS::XXX(char const*, char const*, char const*)
还有另一个使用父级的lib,我们称其为libB.so
>> nm -C libB.so | egrep XXX
000000000000000 U NS::XXX(char const*, char const*, char const*)
但是libB.so具有指向libA.so的链接
>> ldd libB.so | grep libA.so
libB.so => /export/data/NS/lib/libA.so (0x00007fbc0a9bf000)
当我链接到SUSE时,下面的内容会编译
g++ child.cpp -o child -I. -L. -lB
当我在RHEL上链接时,它抱怨XXX未定义,所以我也必须做libA
g++ child.cpp -o child -I. -L. -lB -lA
我不明白为什么会有区别。我尝试了(Linking with dynamic library with dependencies)中建议的选项。编译时我仍然必须链接libA。
-Wl,--unresolved-symbols=ignore-in-shared-libs
-Wl,--as-needed