使用SSL库CMake链接器错误

时间:2015-07-21 12:43:38

标签: cmake

我正在编译&在Linux中链接OPC UA源代码,使用CMake构建二进制文件。 在链接时,我收到以下错误:

/bin/linux/xxx/Debug/libxx.so: undefined reference to
`CRYPTO_free@OPENSSL_1.0.0' /bin/linux/xxx/Debug/libxx.so: undefined
reference to `i2d_X509@OPENSSL_1.0.0'

它引用自定义库(/ opt / lib /)路径中存在的SSL,加密库。

要解决此错误,我尝试了

1)我还在链接器标志中添加了/ opt / lib:

SET(GCC_COVERAGE_LINK_FLAGS    "-L/opt/lib/ -lssl -lcrypto -ldl -lrt ")

add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})

SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )

2)我还在link_directories中添加了ssl和crypto库路径:

set (OPENSSL_LIBRARY_DIRS /opt/lib)

link_directories(${OPENSSL_LIBRARY_DIRS})

我仍然遇到相同的链接器问题。

/opt/lib/下,libssl.solibcrypto.so可用。 通过添加ssl和crypto库,我能够成功编译链接并运行使用CRYPTO_free()函数的示例Qt项目。 但我想知道如何使它与CMake一起使用。

注意:我使用的是cmake版本3.3.0-rc3版本。

1 个答案:

答案 0 :(得分:0)

如果可能,您应该使用find_package(OpenSSL)并使用生成的OPENSSL _...变量,而不是硬编码库名称和搜索路径。您可以在调用find_package之前设置OPENSSL_ROOT_DIR,告诉模块在哪里搜索OpenSSL。

https://cmake.org/cmake/help/v3.0/module/FindOpenSSL.html

如果您正在为另一个目标进行交叉编译,那么您应该尝试使用工具链文件来告诉CMake一般在哪里查找包含和库。

https://cmake.org/cmake/help/v3.0/manual/cmake-toolchains.7.html