命令行中缺少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:调用库的顺序对于链接器的正常工作也很重要。
相关文章:
- 使用CMake创建QML插件
- 使用CMake检测支持的C++标准
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 如何在Ubuntu中使用cmake设置qt4
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- Clion显示错误,但可以使用Cmake成功构建代码
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 使用 cmake 生成 compile_commands.json
- 当我尝试通过 mingw 使用 CMake 和 SFML 库编译项目时出错
- 无法使用 CMake 从其他文件夹添加源文件
- 使用 Cmake 在 Qt Creator 中显示头文件
- 使用 CMake,Microsoft MPI 和 Visual Studio 2017 找不到 mpi.h
- 使用 CMake 和 Visual Studio 2019 编译 GLEW?
- 不使用configure_file时如何使用CMake生成C++代码?
- 如何使用 CMake 在 android 构建上编译和共享两个 c++ 库