首页 > 解决方案 > g++ 链接 RedHat 与 SUSE 期间未解析的符号

问题描述

嗨,我一直在寻找有关链接错误的主题 - 错误:: 未定义对 XXX 的引用,

我的代码在 SUSE 上编译,但不是在 REDHAT 上编译,如果有人能告诉我一些关于这一点的信息,我将不胜感激。我没有找到与我的情况特别匹配的其他帖子(也许我错过了),有一个非常接近的帖子(Linking with dynamic library with dependencies)。我试过了,但我还是碰到了石头。

背景:我有一个使用 parent.cpp 的 child.cpp,所以我在 child.cpp 中包含了 parent.h

parent 中的符号 (XXX) 包含在 libA.so 中

>> nm -C libA.so | egrep XXX
000000000013eb0 T NS::XXX(char const*, char const*, char const*)

还有另一个使用父库的库,我们称之为 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 上链接时,它抱怨 undefine 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

标签: c++linkerg++rhelsuse

解决方案


推荐阅读