2016-11-07 48 views
1

我已经创建了一个名为a.so的共享对象,并且它与在c/C++(linux)中开发的可执行文件完美协作。该共享对象提供了一些用于集成到外部软件中的功能。以下是此共享对象的一些特点:未定义的引用共享对象Linux [C++]

  • 进行沟通与RS232
  • TCP/IP + SSL通信设备与服务器

现在我创建JNI封装(b.so)上述共享对象的和使用该命令来打开共享对象,并创建一个处理程序:

的dlopen(FILE_NAME,RTLD_LAZY | RTLD_GLOBAL):

但它给我的错误无法加载LIB:/usr/lib/a.so - [/usr/lib/a.so:未定义的符号:EVP_cleanup]

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

我试图链接b.so中的ssl和加密库,但输出与上面相同。

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

感谢

问候

回答

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 
+0

谢谢! 它解决了这个问题。 – user391318