繁体   English   中英

命令行中缺少 DSO(使用 CMake)

[英]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。 我已经看到几个答案,如:

命令行中缺少 DSO

如何告诉 CMake 链接源目录中的静态库?

如何在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM