cmake之链接外部动态库

原创 2016年05月30日 11:40:54

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路径下。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

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

cmake是一种跨平台的构建工具。它可以生成各种平台支持的makefile和project文件。 在windows下,一般都是用visual studio来管理工程。 事实上,就本人来说,使用cmak...

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

使用cmake**生成库**主要要注意三个文件夹 (1)源文件文件夹 (2)中间文件夹(编译生成的.o等文件的文件夹) (3)安装文件夹(最终可用的库所在的文件夹) 使用库的步骤 (1)在工程...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

使用CMAKE链接外部的动态库时找不到库文件解决办法(/usr/bin/ld: cannot find lxxx)

如果你有外部已经生成的动态库文件 libtest.so,在使用CMake编译生成目标文件myproject时需要依赖该so库文件,假设文件存于{MY_PROJECT_DIR}/bin目录下,要链接成功...

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

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

cmake之管理多版本opencv

我要使用orb-slam2,依赖DBoW2,DBoW2依赖DLib,不就是装软件嘛,谁不会啊~
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)