【发布时间】:2019-11-15 19:34:04
【问题描述】:
我有一些具有cmake 构建系统的代码库。在构建 iam 时出现如下错误
/usr/bin/ld: cannot find -lcurl
下面是示例cmakelist.txt
cmake_minimum_required(VERSION 2.8.6)
project(oci_object_test)
set(IB_HOME /home/user/sample_cmake/usr/lib)
include_directories(${LIB_HOME}/include)
link_directories(${LIB_HOME}/lib64)
link_directories(/home/user/sample_cmake/usr/lib/lib64)
link_directories(/home/user/)
set(SOURCES
sample.cpp
)
add_executable(demo ${SOURCES})
target_link_libraries(demo curl openssl)
上面的cmakelist.txt下面是cmake生成的link.txt
/usr/bin/c++ CMakeFiles/demo.dir/sample.cpp.o -o demo -L/home/user/sample_cmake/usr/lib/lib64 -L/home/user -rdynamic -lcurl -lopenssl -Wl,-rpath,/home/user/sample_cmake/usr/lib/lib64:/home/user
这个问题是由于 -lcurl 被添加到 cmake 生成的 link.txt 中。如果我手动从link.txt 中删除-lcurl 并构建,构建将成功且没有链接器错误。那么有什么方法可以让我在link.txt 中摆脱这个-lcurl,或者是否可以在实际存在libcurl 的位置定义-lcurl 路径(例如,假设libcurl 存在于/usr/curl_path/curl 中)以便cmake 可以生成链接。 txt如下?
/usr/bin/c++ CMakeFiles/demo.dir/sample.cpp.o -o demo -L/home/user/sample_cmake/usr/lib/lib64 -L/home/user -rdynamic /usr/curl_path/curl -lopenssl -Wl,-rpath,/home/user/sample_cmake/usr/lib/lib64:/home/user
我知道我可以直接定义libucrl 路径如下,这将解决我的问题,
target_link_libraries(demo /usr/curl_path/curl openssl)
但我正在寻找类似SET 或任何其他cmake environment variable 之类的东西,我可以在 toolchain.cmake 文件中定义它们,这样cmakelist.txt 就不会被触及,in simple words how do i specify those libraries's path to cmake which are going use inside target_link_libraries
【问题讨论】:
-
您必须查看 CMakeLists.txt 文件以查看 curl 库的链接位置。在 CMake 文件中查找
link_libraries()或target_link_libraries()命令,这些命令可能包含curl或-lcurl。如果没有看到 CMake 文件本身,很难提出任何明确的建议...... -
@squareskittles 我已经添加了示例 cmakelist.txt 和问题的完整描述,请查看它
-
CMake 不会自动将 libcurl(或任何其他库)链接到您的程序。您在 CMakeLists.txt 的某处有(或有)链接此库的请求。简而言之:@squareskittles 是对的。您可以展示完整的 cmake 脚本,也可以自行查找。
-
如何指定 target_link_libraries 使用的库的 cmake 路径?