未定义的引用共享对象Linux [c ++]

时间:2016-11-07 11:47:45

标签: c++ c linux ssl

我创建了一个名为 a.so 的共享对象,它与在c / c ++(linux)中开发的可执行文件完美配合。此共享对象提供了一些集成在外部软件中的功能。以下是此共享对象的一些特征:

  • 使用RS232上的设备进行通信
  • 与服务器的TCP / IP + SSL通信

现在我正在创建上述共享对象的JNI包装器(b.so),并使用此命令打开共享对象并创建处理程序:

dlopen(FILE_NAME,RTLD_LAZY | RTLD_GLOBAL):

但是它给了我错误无法加载LIB:/usr/lib/a.so - [/usr/lib/a.so:undefined symbol:EVP_cleanup]

EVP_cleanup在a.so中使用,是openssl / evp.h头文件的一部分。

我试图在b.so中链接ssl和crypto libs,但输出与上面相同。

有人可以给我建议或替代方法吗?

由于

此致

1 个答案:

答案 0 :(得分:2)

您似乎只将代码与libssl.so相关联。

您还必须明确链接到libcrypto.soEVP_cleanup()中定义了libcrypto.so

objdump是一个有用的工具,用于确定在缺少文档时需要链接的内容。

$ objdump -T /usr/lib64/libcrypto.so | grep EVP_cleanup
000000000012f5e0 g    DF .text  0000000000000054  libcrypto.so.10 EVP_cleanup