cmake链接库文件不使用-l

cmake链接库文件不使用-l,第1张

Never 将 -l 标志添加到 CMAKE_EXE_LINKER_FLAGS 和 >CMAKE_CXX_FLAGS(标志 -l 用于链接器,而不是编译器).

对于与库的链接,请使用 target_link_libraries:它是专门用于该目的:

target_link_libraries(<your-executable>curl)

<小时>

当您向 *_FLAGS 变量锋搜添加标志时,该标志将在链接器的命令行中源文件之银哪历前(实际上是目标文件)添加.如果源文件缓睁使用库中的某些函数,则链接器找不到它.

1.头文件

include存放的是编译库文件生成的头文稿丛枝件集合,比如curl目录,目录中都是.h文件,添郑弯加方式如下:

2.库文件

lib是存放库文件的目录,形如libxxx.so或键敏libxxx.a形式的文件,添加方式如下:

3.引用

库的引用可以直接取libxxx.a中的xxx部分,如下的curl、ssl、crypto就是:

1.编译报错“undefined reference to `pthread_create'”

解决办法:引入pthread库

2.编译报错“libcrypto.a undefined reference to symbol 'dlclose'”

解决办法: add -ldl after libcrypto and libssl in your link command.

对于大型工程项目,我们往往需要引入一些第三方库来帮助我们更好的解决问题,对于第三方库,有的是编译好的,有的是源码,情况不同,处理方式不同,由于笔者这方面也是刚入门,所以在此记下笔记,以备后续需要.

1.对于有.cmake的第三方库:

list(APPEND CMAKE_PREFIX_PATH "./thirdParty/opencv/build")   #.cmake所在判锋裂路径  find_package(OpenCV REQUIRED)                      基亩                                       add_executable(project main.cpp)

target_link_libraries(project ${OpenCV_LIBS})                                  #将exe与第三方库链接

2.对于需要源码编译(例如src文件夹中含有一堆.h,.cpp文件等)

file(GLOB_RECURSE <变量名>"src/ .hpp" "src/ .cpp" "src/ .h" "src/ .c")  

add_library(<库名>STATIC ${变量名})          

3.对于已经编译好的第三方库

add_library(<库名>INTERFACE IMPORTED)      #将已编译好的include和lib封装成你想掘闭要的库 target_include_directories(<库名>INTERFACE <include文件夹所在路径>)

target_link_directories(<库名>INTERFACE <lib文件夹所在路径>)

target_link_libraries(<库名>INTERFACE <需要的.lib文件>)

4.将很多第三方库统一放在一个文件夹 “thirdparty” 下

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

set_target_properties(<库名>PROPERTIES FOLDER "thirdparty")


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12192095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存