我创建了一个名为 a.so 的共享对象,它与用 c/c++ (linux) 开发的可执行文件完美配合。该共享对象提供了一些用于集成到外部软件中的功能。以下是此共享对象的一些特征:
- 通过 RS232 与设备通信
- 与服务器的 TCP/IP + SSL 通信
现在我正在创建上述共享对象的 JNI 包装器 (b.so) 并使用此命令打开共享对象并创建处理程序:
dlopen(FILE_NAME,RTLD_LAZY | RTLD_GLOBAL):
但它给了我错误Unable to Load LIB :/usr/lib/a.so - [/usr/lib/a.so: undefined symbol: EVP_cleanup]
EVP_cleanup在a.so中使用,是openssl/evp.h头文件的一部分。
我也尝试在 b.so 中链接 ssl 和加密库,但输出与上面相同。
有人可以给我建议或替代方法吗?
谢谢
问候
最佳答案
您的代码似乎只与 libssl.so
链接。
您还必须显式链接 libcrypto.so
。 EVP_cleanup()
在 libcrypto.so
中定义。
objdump
是一个有用的工具,可在缺少文档时找出您需要链接的内容。
$ objdump -T /usr/lib64/libcrypto.so | grep EVP_cleanup
000000000012f5e0 g DF .text 0000000000000054 libcrypto.so.10 EVP_cleanup
关于c++ - undefined reference 共享对象 Linux [c++],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40464452/