在RedHat与SUSE链接期间出现g ++无法解析的符号

时间:2018-09-24 03:42:28

标签: c++ linker g++ rhel suse

嗨,我一直在寻找有关链接错误的主题-错误::对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

0 个答案:

没有答案