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