14

我正在尝试通过使用 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 做什么吗?

谢谢

4

2 回答 2

3

如果不查看 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
于 2020-08-22T18:45:46.463 回答
1

您得到的错误是关于在BigNumber.cpp文件中调用的函数缺少链接。

正在发生的事情CMakeLists.txt很可能缺少以下库:

TARGET_LINK_LIBRARIES( youApp
  library1
  library2
)

PS:调用库的顺序对于让链接器正常工作也很重要。

于 2016-10-16T15:08:51.247 回答