C++ 动态链接库的创建与应用

cpp课的作业

Posted by Leo on March 6, 2022

动态库


Dynamic Link Library(DLL),是windows中实现共享函数库的一种方式,它包含了一些函数和数据,能够被其他模块使用。

在使用动态库时,往往需要两个文件,是引入库(.lib)和.dll,其中引入库(.lib)是包含该dll导出的函数和变量符号名,可以认为是函数和变量的声明,在执行编译和链接可执行文件时,需要引用引入库的符号名,而DLL文件其中的函数和变量被可执行文件运行并使用后,系统采取加载相对应的DLL,并将DLL文件映射到进程的地址空间,然后访问DLL文件的导出函数,所以**DLL文件应用于程序运行时

利用CLion构建DLL文件


这边是构造C的dll,选择上面的C++ library,其余都是一样的

br0xKK.png

image

创建项目链接dll


在项目下创建lib目录,将所创建的.dll放入该文件夹,并在CMakeList中关联它,dl文件需要用绝对路径表示

1
2
3
4
5
6
# assign a directory
link_directories(lib)

# assign a specific link library
target_link_libraries(lesson1 PRIVATE D:\\Archive\\cpp\\lesson1\\lib\\libhelloDll.dll)
#其中的lesson1就是${PROJECT_NAME}$, 也可以用${PROJECT_NAME}代替

并需要在环境变量中添加

brbVbD.png

C++就把dll之前需要调用的函数再声明一下就好了

brbFv6.png

其中如果是C语言写的dll文件,需要加上

1
2
3
4
5
6
7
8
// the lib is set up under the C environment, so we need to convert it to the C++ first
#ifdef __cplusplus
extern "C" {
#endif
void hello();
#ifdef __cplusplus
}
#endif