关闭

cmake之链接外部动态库

标签: cmake
2383人阅读 评论(0) 收藏 举报
分类:

cmake不再使你在构建项目时郁闷地想自杀了。  --佚名KDE开发者

1.写在开头

  1. 有两种方式,一种是cmake自己内置的find_package,另一种是使用pkg-config。

2. find-package

cmake_minimum_required(VERSION 2.8)

find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
    message(${OpenCV_INCLUDE_DIRS})
    message(${OpenCV_LIBRARIES})
endif(OpenCV_FOUND)

使用这个命令时,cmake程序会在/usr/share/cmake-x.x/Modules/目录下,寻找FindOpenCV.cmake文件,通过这个文件,读取所有关于OpenCV库的安装信息。

奇怪的是,我的这个目录下,并没有FindOpenCV.cmake文件,但强大的find_package命令还是可以找到opencv的安装信息,怎么回事?

是因为,我安装的版本是cuda版,每次要寻找OpenCV时,它会先找到cuda,然后在cuda的配置文件里面,包含了OpenCV的安装信息。所以,我/usr/share/cmake-x.x/Modules/目录下,有一个FindCUDA.cmake文件。

另外,可以在CMakeLists.txt文件中,添加find_package的寻找路径。

set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} <your path>)

是FindXXX.cmake文件的路径

3. pkg-config

cmake_minimum_required(VERSION 2.8)

find_package(PkgConfig)
pkg_check_modules(OpenCV opencv>=3.1.0)
if(OpenCV_FOUND)
    message(${OpenCV_INCLUDE_DIRS})
    message(${OpenCV_LIBRARIES})
endif(OpenCV_FOUND)

它寻找PKG_CONFIG_PATH路径下的xxx.pc文件,获取库的相关信息。

pkg-config --variable pc_path pkg-config

终端输入这个命令,可以查看PKG_CONFIG_PATH具体的值。这是我的值:

/usr/local/lib/x86_64-linux-gnu/pkgconfig
/usr/local/lib/pkgconfig
/usr/local/share/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/pkgconfig
/usr/share/pkgconfig

不知道为什么,基于debian的ubuntu总喜欢搞一个x86_64-linux-gnu文件夹。

对于编译安装了多个版本OpenCV库情况,只需要把编译库时生成的opencv.pc文件拷贝到这些目录下,就可以,或者添加opencv.pc路径到PKG_CONFIG_PATH变量。

我把最新版本的opencv.pc文件拷贝到/usr/lib/x86_64-linux-gnu/pkgconfig路径下。

0
0
查看评论

linux下生成动态链接库并使用(使用cmake)

使用cmake**生成库**主要要注意三个文件夹 (1)源文件文件夹 (2)中间文件夹(编译生成的.o等文件的文件夹) (3)安装文件夹(最终可用的库所在的文件夹) 使用库的步骤 (1)在工程文件中包括库函数的头文件(可为绝对路径,也可配置全局环境变量用相对路径) (2)在CMakeLis...
  • ktigerhero3
  • ktigerhero3
  • 2017-04-01 11:04
  • 2479

CMake - 可执行文件 - 动态链接库 - libcurl

假设有一个TestHttpClient Solution,这个Solution下分别有TestHttpClient工程(可执行程序)和Htt
  • lee353086
  • lee353086
  • 2014-08-23 10:27
  • 7707

Linux系统动态链接库和静态链接库CMake的使用方法

Linux系统动态链接库和静态链接库CMake的使用方法 lpsolve
  • wenxuegeng
  • wenxuegeng
  • 2016-04-28 16:31
  • 3311

在linux中使用cmake构建共享库(动态链接库)

cmake是一种跨平台的构建工具。它可以生成各种平台支持的makefile和project文件。 在windows下,一般都是用visual studio来管理工程。 事实上,就本人来说,使用cmake主要是为了避免在linux下手写makefile的繁琐。 cmake在ubuntu下的安装: su...
  • wks19891215
  • wks19891215
  • 2016-03-29 02:34
  • 4278

CMake命令target_link_libraries链接库的顺序

target_link_libraries里库文件的顺序符合gcc链接顺序的规则,即被依赖的库放在依赖它的库的后面,比如 target_link_libraries(hello A B.a C.so) 在上面的命令中,libA.so可能依赖于libB.a和libC.so,如果顺序有错,链接时会报错。...
  • zhujianwei31415
  • zhujianwei31415
  • 2016-02-24 09:46
  • 8336

【C++】linux下CMake生成动态链接库,g++包含生成动态链接库

一、前言   由于项目中要用到java调用C++的库文件,于是需要在linux下编译连接生成动态库,然后根据Recast官方包要先CMake生成编译,然后在包含到自己实现的文件,网上查了半天,坑爹没有全面的,东拼西凑终于才明白原理,于是总结记录分享如下。 二、CMake生成库文件   总的来说C...
  • lufeng20
  • lufeng20
  • 2014-01-20 15:25
  • 18938

CMake学习笔记(4)——使用外部共享库和头文件

这里我们要创建工程调用上一篇教程生成的动态库和静态库。 创建一个新的cmake工程,工程结构如下: t4 ├── build ├── CMakeLists.txt └── src ├── CMakeLists.txt └── main.c 然后编写工程目录下的CMakeList...
  • Bobsweetie
  • Bobsweetie
  • 2016-06-27 16:22
  • 2977

cmake --使用外部库和头文件

编写一个程序使用我们上一节构建的共享库。1,准备工作:请在/backup/cmake 目录建立 t4 目录,本节所有资源将存储在 t4 目录。2,重复以前的步骤,建立 src 目录,编写源文件 main.c,内容如下:#include int main(){HelloFunc();return 0;...
  • lizhifeng2009
  • lizhifeng2009
  • 2013-04-18 17:20
  • 9713

CMake添加头文件,库文件,链接库文件

CMake添加头文件,库文件,链接库文件
  • x_r_su
  • x_r_su
  • 2016-10-25 22:02
  • 8607

《CMake实践》笔记三:构建静态库与动态库 及 如何使用外部共享库和头文件

《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX 《CMake实践》笔记三:构建静态库与动态库 及 如何使用外部共享库和头文件   五、静态库与...
  • Primeprime
  • Primeprime
  • 2016-11-03 11:57
  • 2376