Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何指定库';目标链接库使用的cmake的路径_Cmake_Linker_Libcurl_Ld - Fatal编程技术网

如何指定库';目标链接库使用的cmake的路径

如何指定库';目标链接库使用的cmake的路径,cmake,linker,libcurl,ld,Cmake,Linker,Libcurl,Ld,我有一些代码库,它有cmake构建系统 /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

我有一些代码库,它有
cmake
构建系统

/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 
此问题是由于cmake生成的
link.txt
中添加了
-lcurl
。如果我手动从
link.txt
中删除
-lcurl
,并进行构建,则构建将获得成功,而不会出现链接器错误。那么,我有没有办法在
link.txt
中去掉这个
-lcurl
,或者可以在实际libcurl出现的地方定义-lcurl路径(例如假设libcurl出现在
/usr/curl\u path/curl
中),以便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 /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环境变量
的东西,我可以在toolchain.cmake文件中定义这些变量,以便
cmakelist.txt
不被触及,
简单地说,我如何指定那些将在target\u link\u库中使用的库的cmake路径

如果您的cmake版本低于3.12,则需要使用此旧方法。见:
add_library( curl SHARED IMPORTED)
set_property(TARGET curl PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")

CMake 3.12及更高版本有一种使用导入目标的新方法。看看新的选择


我发现这个问题可以通过两种方法来解决(第一种方法类似于)

第二种方法是在调用
target\u link\u目录之前,将下面两行代码添加到
cmakelist.txt
文件中

add_library( curl SHARED IMPORTED)
set_property(TARGET curl PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")
其中
CURL\u LIBRARY
libcurl.so
toolchain.cmake

不幸的是,我没有找到任何解决方案来解决这个问题,而没有触及
cmakelist.txt

您必须查看CMakeLists.txt文件,以查看curl库链接的位置。在CMake文件中查找
link\u libraries()
target\u link\u libraries()
命令,这些命令可能包含
curl
-lcurl
。如果没有看到CMake文件本身,很难提出任何明确的建议…@squareskittles我添加了示例cmakelist.txt和问题的完整描述请查看itCMake不会自动将libcurl(或任何其他库)链接到您的程序。您在CMakeLists.txt中的某个地方请求链接此库。简言之:@squareskittles是正确的。您可以显示完整的cmake脚本,也可以自己查找。如何指定目标链接库使用的库到cmake的路径?
add_library( curl SHARED IMPORTED)
set_property(TARGET curl PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")