共享库未定义的符号

时间:2017-08-23 09:36:16

标签: c linux gcc shared-libraries dlopen

存在类似的标题问题但不是同一个问题。 我有两台机器,一台用 CentOS 7.3.1611 ,一台与CentOS类似,你可以说自定义RedHat
我有一个我需要在自定义机器上运行的SDK,但它没有 yum gcc
所以我必须在CentOS上编译和安装SDK,之后我将结果复制到自定义机器(共享库,脚本,二进制文件...),以便在那里运行它们。
当然,SDK在CentOS上运行良好,但在自定义机器上加载一些驱动程序和其他库时,我在加载特定库时遇到错误,如下所示:

  

dlopen(libsdkpolicerlib.so)失败:(/ 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

我知道这不是做这类事情的最好方法,但这个解决方案是暂时的。

我的问题是我还需要验证哪些才能使其正常工作? 我在这里失踪了什么?

1 个答案:

答案 0 :(得分:0)

您可以使用ldd命令检查/lib/libsdkpolicer.so.1,也许您复制的libpolicercomlib.so文件只是一个链接文件,并在没有yum GCC的计算机上进行检查。如果一切正确,您可以将/lib64/ld-linux-x86-64.so.2加载程序从您的complie机器复制到新机器(之前备份)并尝试。