D:\software\项目\Code\LibDemo\static\Src>g++ -fPIC -I../Header -c Students.cpp
Students.cpp:1:0: warning: -fPIC ignored for target (all code is position independent)
#include “Students.hpp”
^上面的warnning 可以忽略掉
D:\software\项目\Code\LibDemo\static\Src>g++ -shared Students.o -o libStudents.dll
执行完上述命令后,会在Src目录下生成libStudents.dll文件
下面测试生成的libStudents.dll是否可以正常使用
先在QT creator下演示,使用的项目还是测试静态库使用的那个,把 Lib下的其他库文件清空,把libStudents.dll文件放到其下。
其他地方不需要改,编译–>运行 结果如下:
但是当我们通过cmd命令 执行Target下生成的可执行文件:
提示找不到libStudents.dll,因为动态库并没有在链接阶段并入到可执行文件中,是在可执行文件运行时动态加载的,而我们的dll文件是在LIb目录下,而可执行文件默认是从当前目录下查找,所以找不到。
下面测试在QT上生成动态库:
项目用的还是生成静态库的那个项目,只是把CONFIG += staticlib 改为CONFIG += dll,编译后在Target目录下生成Students.dll文件。和我们通过cmd命令行指定生成文件名的方式不同。这里默认生成的dll文件名为项目名,dll文件的这个文件不能修改,否则链接库找不到此文件,大概生成dll文件时,文件的名字也已经被写入到dll文件里了,再链接时,可执行文件访问的dll文件里记录的dll文件的名字,即使在编译时改为libStudents.dll,那么在链接时还是提示找不到Students.dll文件。
测试生成的Students.dll
同测试静态库时,使用项目一样,把Students.dll文件放到Lib下。把其他的库文件清空。
测试效果如下:
总结一下,生成动态库的命令:
g++ -fPIC -I../Header -c Students.cpp
g++ -shared Students.o -o libStudents.dll #生成.dll文件动态库–windows上使用
g++ -shared Students.o -o libStudents.so #生成.so文件动态库–Linux上使用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142697.html