linux 中编译时对于多版本库的调用管理

    linux 使用makefile编译工程时,经常会链接一些开源代码的库,这些一般会有多个版本的发布,这时如果要灵活指定工程调用的开源库,常见的方法是使用pkg-config方法。

    1,我这里以opencv,为例。目前opencv在github 上有3个branch。下载source code 到本地库。分别编译三个branch的最新源码到 /usr/local/opencv3.0.0-rc1  /usr/local/opencv4   /usr/local/opencv2   三个目录 下。

    2,更改pkg-config相关的配置。进入/usr/local/opencv3.0.0-rc1/lib/pkgconfig/    ,里面会有一个opencv3.0.0-rc1.pc 的配置文件,这个文件的名字是之后pkg-config --libs --cflags opencv3.0.0-rc1    指令里的标签,这个名字可以按照自己的意愿。把这个*.pc文件加入到/etc/bash.bashrc  文件中,然后让其生效。可以参数另一个文档https://blog.csdn.net/taohaiwu/article/details/79500295

    3,在终端中$:pkg-config --libs --cflags opencv3.0.0-rc1      会打印如下 LOG

          -I/usr/local/opencv3.0.0-rc1/include/opencv -I/usr/local/opencv3.0.0-rc1/include /usr/local/opencv3.0.0-rc1/lib/libopencv_calib3d.so /usr/local/opencv3.0.0-rc1/lib/libopencv_core.so /usr/local/opencv3.0.0-rc1/lib/libopencv_features2d.so /usr/local/opencv3.0.0-rc1/lib/libopencv_flann.so /usr/local/opencv3.0.0-rc1/lib/libopencv_hal.a /usr/local/opencv3.0.0-rc1/lib/libopencv_highgui.so /usr/local/opencv3.0.0-rc1/lib/libopencv_imgcodecs.so /usr/local/opencv3.0.0-rc1/lib/libopencv_imgproc.so /usr/local/opencv3.0.0-rc1/lib/libopencv_ml.so /usr/local/opencv3.0.0-rc1/lib/libopencv_objdetect.so /usr/local/opencv3.0.0-rc1/lib/libopencv_photo.so /usr/local/opencv3.0.0-rc1/lib/libopencv_shape.so /usr/local/opencv3.0.0-rc1/lib/libopencv_stitching.so /usr/local/opencv3.0.0-rc1/lib/libopencv_superres.so /usr/local/opencv3.0.0-rc1/lib/libopencv_ts.a /usr/local/opencv3.0.0-rc1/lib/libopencv_video.so /usr/local/opencv3.0.0-rc1/lib/libopencv_videoio.so /usr/local/opencv3.0.0-rc1/lib/libopencv_videostab.so

       4,在工程的CMakeLists.txt 里面引用这个pkg-config

           

cmake_minimum_required(VERSION 2.8)


SET(TARGET_OS linux_x86_64)


 

 

 

if("${TARGET_OS}" STREQUAL "linux_x86_64")
message(STATUS "TARGET_OS = ${TARGET_OS}")
endif()

project(hello)

if("${TARGET_OS}" STREQUAL "linux_x86_64")
include(FindPkgConfig)
pkg_check_modules(PKGS REQUIRED 
                opencv3.0.0-rc1
                )


include_directories(${PKGS_INCLUDE_DIRS})
link_directories(${PKGS_LIBRARY_DIRS})


#add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
elseif()
set(CMAKE_C_FLAGS "-pie -fPIE ")
set(CMAKE_CXX_FLAGS "-pie -fPIE ")
set(CMAKE_LD_FLAGS "-pie -fPIE ")
endif()

message(STATUS "CMAKE_C_COMPILER = ${CMAKE_C_COMPILER}")

message(STATUS "CMAKE_C_FLAGS = " ${CMAKE_C_FLAGS})
message(STATUS "CMAKE_CXX_FLAGS = " ${CMAKE_CXX_FLAGS})
message(STATUS "CMAKE_LD_FLAGS = " ${CMAKE_LD_FLAGS})

add_executable(hello1 hello.cpp)
target_link_libraries(hello1 ${PKGS_LDFLAGS})

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值