linux 中編譯時對於多版本庫的呼叫管理

2021-09-09 08:32:50 字數 2306 閱讀 9632

linux 使用makefile編譯工程時,經常會鏈結一些開源**的庫,這些一般會有多個版本的發布,這時如果要靈活指定工程呼叫的開源庫,常見的方法是使用pkg-config方法。

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  檔案中,然後讓其生效。可以引數另乙個文件

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("$" strequal "linux_x86_64")

message(status "target_os = $")

endif()

project(hello)

if("$" strequal "linux_x86_64")

include(findpkgconfig)

pkg_check_modules(pkgs required 

opencv3.0.0-rc1

)include_directories($)

link_directories($)

#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 = $")

message(status "cmake_c_flags = " $)

message(status "cmake_cxx_flags = " $)

message(status "cmake_ld_flags = " $)

add_executable(hello1 hello.cpp)

target_link_libraries(hello1 $)

linux下編譯時,鏈結math庫

在gcc下用到數學函式,如sqrt。在gcc時要加上 lm 引數,這樣告訴編譯器我要用到數學函式了 如 gcc a.c o a lm 當在用eclipse編譯使用數學函式的c語言程式時,如sqrt,pow,即使已經加入math.h,也會提示類似於undefined reference to sqrt...

前端多版本編譯時,環境配置的解決思路 及 實現

書接上回測試環境 前端 自動化編譯 發布指令碼 的 編寫 及 原理解析 在最後發現了問題,在本篇中將其解決。上文中涉及到乙個build.sh檔案,主要對其改造即可。path填寫為專案的路徑,最好是絕對路徑 cd path rm rf dist npm run build cd dist 編譯完成後,...

Linux環境下多版本編譯器 gcc 共存

在linux開發環境下,有時候會遇到安裝配置不同依賴包,而需要用到不同版本gcc或g 的情況,筆者最近在進行海思平台的相關開發時就遇到過這種情況,需要同時在乙個linux環境中安裝多個版本的gcc和g 工具,並針對不同的編譯需求進行版本的切換,因此把方法記錄下來。apt get install gc...