Linux下CMake简明教程(七)对库进行链接
代碼在git
既然我們已經(jīng)生成了庫,那么就進行鏈接測試下。重新建一個工程目錄,然后把上節(jié)生成的庫拷貝過來,然后在在工程目錄下新建src目錄和bin目錄,在src目錄下添加一個main.c,整體結(jié)構(gòu)如下,
main.c內(nèi)容如下,
#include <stdio.h>#include "testFunc.h"int main(void) {func(100);return 0; }工程目錄下的CMakeLists.txt內(nèi)容如下,
cmake_minimum_required (VERSION 3.5)project (demo)set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)set (SRC_LIST ${PROJECT_SOURCE_DIR}/src/main.c)# find testFunc.h include_directories (${PROJECT_SOURCE_DIR}/testFunc/inc)find_library(TESTFUNC_LIB testFunc HINTS ${PROJECT_SOURCE_DIR}/testFunc/lib)add_executable (main ${SRC_LIST})target_link_libraries (main ${TESTFUNC_LIB})這里出現(xiàn)2個新的命令,
- find_library: 在指定目錄下查找指定庫,并把庫的絕對路徑存放到變量里,其第一個參數(shù)是變量名稱,第二個參數(shù)是庫名稱,第三個參數(shù)是HINTS,第4個參數(shù)是路徑,其它用法可以參考cmake文檔
- target_link_libraries: 把目標文件與庫文件進行鏈接
使用find_library的好處是在執(zhí)行cmake …時就會去查找?guī)焓欠翊嬖?#xff0c;這樣可以提前發(fā)現(xiàn)錯誤,不用等到鏈接時。
cd到build目錄下,然后運行cmake … && make,最后進入到bin目錄下查看,發(fā)現(xiàn)main已經(jīng)生成,運行之,
運行成功!
ps:在lib目錄下有testFunc的靜態(tài)庫和動態(tài)庫,find_library(TESTFUNC_LIB testFunc …默認是查找動態(tài)庫,如果想直接指定使用動態(tài)庫還是靜態(tài)庫,可以寫成find_library(TESTFUNC_LIB libtestFunc.so …或者find_library(TESTFUNC_LIB libtestFunc.a …
ps: 查看elf文件使用了哪些庫,可以使用readelf -d ./xx來查看
之前本節(jié)教程使用的是庫查找方法是link_directories,但是很多讀者反映運行時有問題,本人去官方文檔上查了下,發(fā)現(xiàn)不建議使用了,推薦使用find_library或者find_package
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Linux下CMake简明教程(七)对库进行链接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下CMake简明教程(六)动态
- 下一篇: Linux下CMake简明教程(八) 添