十、动态库生成

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 十、动态库生成,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!