gcc CMake find_library未链接项目中的自定义库

8ljdwjyq  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(153)

从标题可能看起来很简单,但对于像我这样的新手,它花了大约2天,还没有弄清楚. CMake版本:3.25.我正在为我的项目使用CMake,我需要使用特定版本的curl库(7.8)。我的Ubuntu系统安装了不同的版本(7.5)。我在一个自定义位置下载了curl(7.8),并libcurl.so在同一个自定义位置生成了www.example.com。我想使用CMake链接位于自定义位置而不是系统提供curl库。
在gcc中,我检查了,我可以在-I & -Wl、rpath选项的帮助下完成。在CMake中,我浏览了它的文档,它建议使用find_library(),但我无法使CMake方式工作。下面是我的CMakeLists.txt,正如你所看到的,我尝试了许多选项。2我正在使用vscode以及命令行来构建Cmake。3任何帮助都非常感谢。

cmake_minimum_required(VERSION 3.5)
project(my_project)
file(GLOB_RECURSE GENR_INCLUDE RELATIVE ${CMAKE_SOURCE_DIR} "inc/*.h")
link_directories()
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unknown-pragmas -g -D_GNU_SOURCE \
                   -D_USINGLIBC -lrt -Wall -pthread -g"
   )

set(CUSTOM_LIB_PATH ${CMAKE_SOURCE_DIR}/static_libraries)
set(CURL_LIB_PATH ${CUSTOM_LIB_PATH}/pc_intel/curl/curl-7.85.0)
set(CMAKE_PREFIX_PATH ${CURL_LIB_PATH})

find_library(CURL_LIBRARY 
         NAMES curl libcurl
         HINTS ${CURL_LIB_PATH})

message(CURL_LIBRARY=${CURL_LIBRARY})

add_compile_definitions(MY_PROJECT)

file(GLOB_RECURSE DRIVER_SOURCE_FILES RELATIVE ${CMAKE_SOURCE_DIR} "src/drivers/*.c")

add_executable (my_project ${DRIVER_SOURCE_FILES}
   ${CMAKE_CURRENT_SOURCE_DIR}/src/manager.c
)

target_link_libraries (my_project PUBLIC
   ${CURL_LIBRARY}
)

消息()始终将标准库显示为CURL_LIBRARY,当我们打印版本时,也是标准库(7.5)。

**更新:**添加后,我可以看到自定义库被选中

set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE)

但现在它在链接器中失败,因为libcurl API的符号未定义。

a11xaf1n

a11xaf1n1#

我通过添加以下内容解决了这个问题:

find_library(CURL_LIBRARY curl
         NAMES libcurl libcurl.so
         ONLY_CMAKE_FIND_ROOT_PATH)

从中学到的关键是,每次尝试CMakeLists.txt时,我们都应该删除CMakeCache.txt

相关问题