类似标题问题存在但不是同一个问题。
我有两台机器,一台装有 CentOS 7.3.1611,另一台装有类似于 CentOS 的机器,您可以说是custom RedHat。
我有一个需要在自定义机器上运行的 SDK,但它没有 yum gcc。
所以我不得不在 CentOS 上编译和安装 SDK,之后我将结果复制到自定义机器(共享库、脚本、二进制文件......)以便在那里运行它们。
当然,SDK 在 CentOS 上运行良好,但在自定义机器上加载一些驱动程序和其他库时正常,加载特定库时出现错误,如下所示:
dlopen (libsdkpolicerlib.so) failed: (/usr/local/bin/../lib/libsdkpolicer.so.1: undefined symbol: policer_validate_packet_type)
注意这里涉及三个共享对象:
- libsdkpolicerlib.so dlopen 尝试打开的那个
- libsdkpolicer.so.1
- libpolicercomlib.so 包含符号 policer_validate_packet_type
所有共享对象都在同一目录 /usr/local/lib .
libpolicercomlib.so 实际上包含符号 。
我有:
- 已验证 ld.so.cache 包含上述所有库。
- 我还添加了/usr/local/lib 到 LD_LIBRARY_PATH 变量。
- 使用路径“-n”执行 ldconfig ...
我知道这不是做这类事情的最佳方法,但这个解决方案是临时的。
我的问题是我还需要验证什么才能使其正常工作?
我在这里错过了什么?
最佳答案
你可以用ldd命令查看/lib/libsdkpolicer.so.1,也许你复制的libpolicercomlib.so文件只是一个链接文件,不用yum GCC在你的机器上查看。如果一切正常,你可以将/lib64/ld-linux-x86-64.so.2 loader从你的complie机器复制到你的新机器(之前备份)并尝试。
关于c - 共享库 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45836019/