c - 共享库 undefined symbol

标签 c linux gcc shared-libraries dlopen

类似标题问题存在但不是同一个问题。 我有两台机器,一台装有 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/

相关文章:

c - 写入数据后向套接字发送错误响应

c - 在 main() 中的 pthread_join 之后执行 pthread_exit 有好处吗?

c - 对 `UNITY_BEGIN' 和 'UNITY_END' 的 undefined reference

c++ - 用 g++ .cpp 文件编译 gcc .o 文件

c - 使用 fgets 从文件中读取

c - 如何在不使用内置malloc函数的情况下实现enque函数?

c++ - 围绕 main 的隐式 try {} catch

c - 了解 glibc

linux - 关于 Linux 和 Windows 中的死锁

linux - 网络中需要原始套接字