代码地址 cmake-examples/01-basic/D-shared-library at master · ttroy50/cmake-examples · GitHub
文件结构
![](https://img-blog.csdnimg.cn/a5079a218fd2441e881deb643eed2a40.png)
1. 添加动态链接库
和静态链接一样 这个add_library 同样可以生成动态链接库。
2. 别名目标
![](https://img-blog.csdnimg.cn/853a1fec49214a33977db2095fd2dcf5.png)
3. 添加动态链接库
![](https://img-blog.csdnimg.cn/807f6483237449dd8dcf907e008d94b9.png)
方法和静态链接库相同。
-------------------------------------------
这里补充下 -Wl 的含义。就是在可执行文件中,写入lib的优先路径。
![](https://img-blog.csdnimg.cn/cb9fe8409c8843b7964c481943094668.png)
感觉还是要学g++的一些指令才行。
---------------------------------------------
这里的-rdynamic也是的讲解 这里也可以看下
![](https://img-blog.csdnimg.cn/28a27b4484904844ad709a94e01bbbc3.png)
gcc或g++的编译选项 -shared -fPIC 与 -g -rdynamic 部分转载_字正腔圆的博客-CSDN博客_g++ -shared
----------------------------------------------------
还有一个思考,就是为什么都要有个target_include_directories?
![](https://img-blog.csdnimg.cn/79a51e05771342238882fdbcc973746c.png)
应为没有这个include文件,那么在后面编译的时候,根本看不到这个库里面的函数或者类。
![](https://img-blog.csdnimg.cn/be56294d994c494e80027edb9e05b5ad.png)
![](https://img-blog.csdnimg.cn/93031c92ab2840a8ad353feaf67a0e99.png)
也就是main.cpp 里面不知道如何调用Hello.cpp的内容。因为看不到那个dll里面的内容。所以编译就会出错,他会说你根本没有定义。
如果定义了的话, 那么就可以过编译,之后只要再链接的时候成功成功找到那么就没问题。
但是如果没定义,那么根本就不知道有这么个东西。
所以把这些库的里面的一些接口暴露在.h中意义重大。
------------------------------------
动态链接库
windows动态链接库使用方法 - 走看看
![](https://img-blog.csdnimg.cn/2faecdce184a4a70857b419d6e765a66.png)
这里的静态lib一定需要吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)