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)

<
<think>我们正在处理用户的问题:“我想在CLion使用CMake配置链接库 请问CLion CMake 配置链接库方法” 根据用户的问题,我们需要指导用户在CLion中如何配置CMake来链接库。我们将参考提供的引用材料,并结合常见的CMake配置方法。 引用材料中提供了以下相关信息: [^1]:在CLion中配置CMake,可以在CMake options中指定工具链文件路径。 [^2]:提到了在CLion中配置Qt项目,建议先在Qt Creator中创建项目,然后再迁移到CLion。 [^3]:说明了CLion在远程机器上执行CMake配置,使用远程的编译器和工具链。 [^4]:在Windows下解决动态链接库(dll)文件问题,通过CMake构建时自动复制dll到输出目录。 [^5]:在Linux使用动态链接库,需要包含头文件(include_directories)和链接目标库(target_link_libraries)。 用户的问题是关于配置链接库,因此我们将重点放在如何设置头文件路径和链接库路径,以及如何链接库。 步骤一般包括: 1. 包含头文件目录:使用`include_directories()`或`target_include_directories()`。 2. 链接库文件:使用`link_directories()`(可选,用于添加库文件搜索路径)和`target_link_libraries()`。 另外,根据引用[^4]和[^5],在Windows下需要注意动态链接库(dll)的部署,在Linux下则需要注意共享库(.so)的路径。 我们将按照以下结构回答: 1. 配置头文件路径 2. 配置库文件路径和链接库 3. 处理动态库(Windows下的dll和Linux下的so) 4. 在CLion中的具体操作步骤 同时,我们将生成相关问题。 注意:我们使用中文回答,并遵循LaTeX格式要求。</think>### CLion CMake 配置链接库方法 在 CLion使用 CMake 配置链接库需通过修改 `CMakeLists.txt` 实现,主要步骤如下: #### 1. **包含头文件目录** 使用 `include_directories()` 或 `target_include_directories()` 添加库的头文件路径: ```cmake include_directories(/path/to/library/include) # 全局包含 # 或 target_include_directories(your_target PRIVATE /path/to/library/include) # 指定目标包含 ``` #### 2. **链接库文件** 使用 `link_directories()` 添加库文件搜索路径,再用 `target_link_libraries()` 链接具体库: ```cmake link_directories(/path/to/library/lib) # 添加库搜索路径 target_link_libraries(your_target PRIVATE library_name) # 链接目标库 ``` - **动态库**:直接写库名(如 `liblist.so` → `list`) - **静态库**:写完整文件名(如 `liblist.a`) #### 3. **特殊场景处理 - **Windows DLL 部署**(引用[^4]): 通过 `add_custom_command` 自动复制 DLL 到输出目录: ```cmake add_custom_command(TARGET your_target POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${DLL_PATH}/lib.dll" $<TARGET_FILE_DIR:your_target> ) ``` - **自定义库路径**(引用[^1]): 在 CMake 选项中指定工具链: ```cmake set(CMAKE_TOOLCHAIN_FILE /path/to/arm-linux-gnueabihf.cmake) ``` #### 4. **CLion 中的操作 1. 修改 `CMakeLists.txt` 后,CLion 会自动重新加载配置 2. 检查配置路径:**Settings > Build, Execution, Deployment > CMake** 3. 远程开发时(引用[^3]),确保路径在远程主机有效 #### 常见错误解决 - **未定义引用**(引用[^5]):检查 `target_link_libraries()` 是否遗漏库 - **库路径错误**:使用 `find_library()` 定位库: ```cmake find_library(MY_LIB libname PATHS /custom/path) target_link_libraries(your_target ${MY_LIB}) ``` > 示例:链接动态库 `liblist.so` > ```cmake > include_directories(include) # 头文件在./include > link_directories(lib) # 库文件在./lib > add_executable(main main.cpp) > target_link_libraries(main list) # 链接 liblist.so > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值