我创建了一个名为 a.so 的共享对象,它与在c / c ++(linux)中开发的可执行文件完美配合。此共享对象提供了一些集成在外部软件中的功能。以下是此共享对象的一些特征:
现在我正在创建上述共享对象的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,但输出与上面相同。
有人可以给我建议或替代方法吗?
由于
此致
答案 0 :(得分:2)
您似乎只将代码与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