c++ - undefined reference 共享对象 Linux [c++]

标签 c++ c linux ssl

我创建了一个名为 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.soEVP_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/

相关文章:

c++ - 在不使用 pthread_join 的情况下等待 pthread_create 完成

c++ - C++中增量垃圾收集模拟的内存分配

python 将整数传递给 C++ 64 位库 : varying sizes

c - 编译c文件后得到什么?

c - 为什么我的 for 循环在这里变成了无限循环?

c - 从静态编译函数返回时子例程线程 JIT x86 机器代码段错误

c++ - 使用 boost 的字符串和函数映射给出编译错误

c - libusb_get_device_descriptor() 始终返回 0。如何检测故障?

python - 让 sublime text 3 使用 anaconda python

c++ - 没有制定目标 `libbrcmEGL.so' 的规则, `HelloTriangle' 需要