我編譯&鏈接在Linux中使用CMake的OPC UA源代碼來構建二進制文件。 連接時,我得到了下面的錯誤:CMake鏈接器錯誤與SSL庫
/bin/linux/xxx/Debug/libxx.so: undefined reference to
`[email protected]_1.0.0' /bin/linux/xxx/Debug/libxx.so: undefined
reference to `[email protected]_1.0.0'
是闖民宅SSL,加密庫中存在的自定義庫(的/ opt/lib中/)路徑。
要解決這個錯誤,我試過
1)我增加了/在連接器選項還可以選擇/ 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)我還添加了SSL和密碼庫路徑link_directories:
set (OPENSSL_LIBRARY_DIRS /opt/lib)
link_directories(${OPENSSL_LIBRARY_DIRS})
仍然我得到相同的鏈接器問題。
在/opt/lib/
,libssl.so
和libcrypto.so
可用。 我能夠成功地編譯鏈接並運行使用CRYPTO_free()
函數的示例Qt項目,方法是添加ssl和加密庫。 但我想知道如何使它與CMake一起工作。
注意:我正在使用cmake版本3.3.0-rc3版本。
不要添加鏈接的標誌一樣, - CMake的不是GNU製作,使用適合(http://www.cmake.org/cmake/help/v3.2/command/find_library .html)[命令](http://www.cmake.org/cmake/help/v3.2/command/target_link_libraries.html)。運行'make'時設置'VERBOSE = 1'環境變量並檢查命令行。如果有不正確的地方,請相應地調整您的CMake文件。您目前的問題非常模糊,在不瞭解其他細節的情況下很難提供更具體的建議。 – ComicSansMS
嗨感謝您的回覆。最後,我通過向CMAKE_LIBRARY_PATH添加SSL庫路徑來解決此問題。 [實際上,我們正在定製buildroot,其中存在SSL庫。]在此find_package()能夠識別SSL安裝之後。 –