静态库,是程序运行过程中会直接加载,作为程序一部分的文件;而动态库,仅是在程序运行过程中,作为一个接口的存在。

静态库在程序加载完成之后,就不再被程序需要,后缀常常为.a或者.lib;而动态库,需要一直等待文件的请求,一直与程序间存在链接,因此不能在程序运行过程中进行移动或删除,动态库的解耦可以比静态库做的更好,同时也更加灵活,后缀常常为.so或者.dll。

在程序启动过程中,常常被提示“*.dll组件缺失或者找不到”,就是该动态库没有被存储,或者位置不正确,而程序调用了一些常见的系统动态库,就会有以上报错,通常只需要去安装VC++即可解决大部分组件缺失问题。

具体实现代码,可以参考该网页

Windows上Clion C语言调用动态库(静态库)_我是谁??的博客-CSDN博客_clion 静态编译

其具体不同,CLion中细微体现在CMakeLists.txt中

1
2
3
4
5
6
7
8
9
10
11
12
cmake_minimum_required(VERSION 3.22)
project(staticH C)

set(CMAKE_C_STANDARD 99)

link_directories(new_lib)
include_directories(include)

add_executable(staticH main.c)

target_link_libraries(staticH libsharedHello.dll)
# target_link_libraries(staticH libstaticHello.a)

已经对于动态库,需要添加一个环境变量(或许在是系统自带的,或许是编译器虚拟出来的)