十、动态库生成

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上使用

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值