Linux+CLion+cmake 动态链接库的使用

在作《剑指offer》中的单向链表的题目时,需要一些常用到的操作链表的函数放在一个文件下,我想把这些函数的声明都写在list.h文件中,把这些函数的定义都写在list.cpp文件中,这样就可以在测试文件test.cpp中调用list.cpp中定义的函数,或者我还想把有关l链表操作的函数封装成一个库,安装到电脑中,这个库可以被外部程序调用。

首先看一下动态链接库和静态链接库分别是什么

动态链接库是以.so结尾的文件,静态链接库是以.a结尾的文件。

一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。

一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。

(所以无论是动态链接库还是静态链接库,都会有lib文件)

1.首先是安装链接库

cmake是一个编程项目管理工具。

首先在你的工程目录下创建 list.cpp,list.h, CMakeLists.txt文件,并创建一个lib文件夹来盛放生成的链接库

然后是在CMakeLists.txt文件中添加如下语句

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)

然后在终端操作安装动态和静态链接库

mkdir build

cd build

cmake DCMAKE_INSTALL_PREFIX=/usr ../

make

sudo make install

如果安装成功,那么就会显示如下信息

--install configuration

--installing: /usr/local/lib/liblist.so

--installing: /usr/local/lib/liblist.a

--Up-to-date: /usr/local/include/list/list/h

2.外部程序使用安装好的动态链接库

在一个新的工程目录下,你创建了test.cpp, CMakeLists.txt文件,在CMakeList.txt文件中写入如下语句

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)

对于这种我们自己编写安装的链接库,我们在使用的时候首先需要将链接库的头文件包含进来,就是这里的include_directories()函数实现这个功能,然后还需要将目标文件,就是这里的ListWithDynamic链接到liblist.so上,就是这里的target_link_libraries()函数实现这个功能,如果没有这个函数,编辑器会提示错误,“undefined reference to 'CreateListNode'” 

3.使用下载安装的第三方库和使用自己编写安装的库的一个在CMakeLists.txt的明显不同是

请查看另一篇文章https://mp.csdn.net/postedit/82380445

猜你喜欢

转载自blog.csdn.net/weixin_38636815/article/details/88049866