[英]DSO missing from command line (With CMake)
我正在尝试通过使用 Cmake 再次编译所有内容,将 C++ 项目从 Windows 转换为 Debian。
我不太习惯在 Linux 上工作,但我设法正确安装了所有东西。
这是错误:
/usr/bin/ld: ../shared/libshared.a(BigNumber.cpp.o): undefined reference to symbol 'BN_new@@OPENSSL_1.0.2d'
//usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2: error adding symbols: DSO missing from command line
这实际上似乎是一个常见问题,但我不知道如何处理 Cmake。 我已经看到几个答案,如:
我有点困惑,你能帮我理解我需要用 Cmake 做什么吗?
谢谢
如果没有看到 CMake 文件本身,很难猜测可能出了什么问题,但这里有一些可能的解决方案。
基于您的第一个参考答案中的类似错误( 命令行中缺少 DSO ),您似乎只是忘记链接到libcrypto.so.1.0.2
库(或者也可能错过了ssl
库)。 根据我的经验,这些通常是串联使用的,因此将两者联系起来可能正是您所需要的。 使用target_link_libraries
命令将这些库链接到您的CMake 目标:
target_link_libraries(MyLib PRIVATE ssl crypto)
我还看到过由于 OpenSSL 版本不匹配而出现此错误的情况。 例如,您的机器上可能安装了 OpenSSL 1.1 版,但您使用的库或包需要 1.0.2 版(如错误所示)。 如果是这种情况,您可以卸载当前的 OpenSSL 版本 (1.1) 并安装旧版本 (1.0.2):
apt-get purge libssl-dev
apt-get install libssl1.0-dev
您收到的错误是关于BigNumber.cpp
文件中调用的函数缺少链接。
发生的事情是CMakeLists.txt
很可能缺少以下库:
TARGET_LINK_LIBRARIES( youApp
library1
library2
)
PS:调用库的顺序对于让链接器正常工作也很重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.