Linux+CLion+cmake 动态链接库的使用
在作《劍指offer》中的單向鏈表的題目時(shí),需要一些常用到的操作鏈表的函數(shù)放在一個(gè)文件下,我想把這些函數(shù)的聲明都寫(xiě)在list.h文件中,把這些函數(shù)的定義都寫(xiě)在list.cpp文件中,這樣就可以在測(cè)試文件test.cpp中調(diào)用list.cpp中定義的函數(shù),或者我還想把有關(guān)l鏈表操作的函數(shù)封裝成一個(gè)庫(kù),安裝到電腦中,這個(gè)庫(kù)可以被外部程序調(diào)用。
首先看一下動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)分別是什么
動(dòng)態(tài)鏈接庫(kù)是以.so結(jié)尾的文件,靜態(tài)鏈接庫(kù)是以.a結(jié)尾的文件。
一種是LIB包含了函數(shù)所在的DLL文件和文件中函數(shù)位置的信息(入口),代碼由運(yùn)行時(shí)加載在進(jìn)程空間中的DLL提供,稱為動(dòng)態(tài)鏈接庫(kù)dynamic link library。
一種是LIB包含函數(shù)代碼本身,在編譯時(shí)直接將代碼加入程序當(dāng)中,稱為靜態(tài)鏈接庫(kù)static link library。
(所以無(wú)論是動(dòng)態(tài)鏈接庫(kù)還是靜態(tài)鏈接庫(kù),都會(huì)有l(wèi)ib文件)
1.首先是安裝鏈接庫(kù)
cmake是一個(gè)編程項(xiàng)目管理工具。
首先在你的工程目錄下創(chuàng)建 list.cpp,list.h, CMakeLists.txt文件,并創(chuàng)建一個(gè)lib文件夾來(lái)盛放生成的鏈接庫(kù)
然后是在CMakeLists.txt文件中添加如下語(yǔ)句
cmake_minimum_required(VERSION 3.5)
project(lib)
set(LIB_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set(CMAKE_CXX_STANDARD 11)
set(LIST_SRC list.cpp)
ADD_LIBRARY(list SHARED ${LIST_SRC})
ADD_LIBRARY(list_static STATIC ${LIST_SRC})
INSTALL(TARGET list list_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
INSTALL(FILES list.h DESTINATION include/list)
然后在終端操作安裝動(dòng)態(tài)和靜態(tài)鏈接庫(kù)
mkdir build
cd build
cmake DCMAKE_INSTALL_PREFIX=/usr ../
make
sudo make install
如果安裝成功,那么就會(huì)顯示如下信息
--install configuration
--installing: /usr/local/lib/liblist.so
--installing: /usr/local/lib/liblist.a
--Up-to-date: /usr/local/include/list/list/h
2.外部程序使用安裝好的動(dòng)態(tài)鏈接庫(kù)
在一個(gè)新的工程目錄下,你創(chuàng)建了test.cpp, CMakeLists.txt文件,在CMakeList.txt文件中寫(xiě)入如下語(yǔ)句
cmake_minimum_required(VERSION 3.5)
project(ListWithDynamic)
set(CMAKE_CXX_STANDARD 11)
include_directories(/usr/local/include/list)
add_executable(ListWithDynamic test.cpp)
target_link_libraries(ListWithDynamic /usr/local/lib/liblist.so)
對(duì)于這種我們自己編寫(xiě)安裝的鏈接庫(kù),我們?cè)谑褂玫臅r(shí)候首先需要將鏈接庫(kù)的頭文件包含進(jìn)來(lái),就是這里的include_directories()函數(shù)實(shí)現(xiàn)這個(gè)功能,然后還需要將目標(biāo)文件,就是這里的ListWithDynamic鏈接到liblist.so上,就是這里的target_link_libraries()函數(shù)實(shí)現(xiàn)這個(gè)功能,如果沒(méi)有這個(gè)函數(shù),編輯器會(huì)提示錯(cuò)誤,“undefined reference to 'CreateListNode'”?
?
3.使用下載安裝的第三方庫(kù)和使用自己編寫(xiě)安裝的庫(kù)的一個(gè)在CMakeLists.txt的明顯不同是
請(qǐng)查看另一篇文章https://mp.csdn.net/postedit/82380445
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Linux+CLion+cmake 动态链接库的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vue value key
- 下一篇: 《DSP using MATLAB 》示