我试图通过使用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。我已经看到了几个答案:
How do I tell CMake to link in a static library in the source directory?
How to add linker or compile flag in cmake file?
我有点困惑,你能帮我理解我需要用Cmake做什么吗?
谢谢
答案 0 :(得分:0)
您获得的错误是关于BigNumber.cpp
文件中调用的函数的缺失链接。
正在发生的事情是CMakeLists.txt
很可能错过了一个库:
TARGET_LINK_LIBRARIES( youApp
library1
library2
)
PS:调用库的顺序对于使链接器正常工作也很重要。
答案 1 :(得分:0)
很难不看CMake文件本身就猜测出了什么问题,但这是一些可能的解决方案。
基于您第一个引用的答案(DSO missing from command line)中的类似错误,似乎您可能只是忘记了链接到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