QT编写纯C接口,并解除依赖

13 篇文章 0 订阅

QT编译的DLL文件有3个基础依赖
libgcc_s_dw2-1.dll,libstdc++-6.dlllibwinpthread-1.dll

libgcc_s_dw2-1.dll是C的依赖
libstdc++-6.dll是C++的依赖
libwinpthread-1.dlllibstdc++-6.dll的依赖

编译.cpp的话就有上诉三个需要依赖的玩意儿
编译.c的话就只有libgcc_s_dw2-1.dll一个玩意儿

但是要做出来的接口要让其他没有这些依赖的环境去用的话,就必须静态编译进去

就可以使用QMAKE_LFLAGS += -static
这样就可以静态编译,但是也有别的副作用

单独消除的话就QMAKE_LFLAGS += -static-libstdc++ -static-libgcc

因为libwinpthread-1.dlllibstdc++-6.dll的依赖,所以要特殊些
64位:
QMAKE_LFLAGS += -static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic

QMAKE_LFLAGS += -static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lgcc_eh -lpthread -Wl,-Bdynamic
32位:
QMAKE_LFLAGS += -static-libstdc++ -static-libgcc -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive -Wl,-Bdynamic

32位的解决方法感谢这个作者

补充:
默认情况下,对于未使用到的符号(函数是一种符号),链接器不会将它们链接进共享库和可执行程序。
这个时候,可以启用链接参数“–whole-archive”来告诉链接器,将后面库中所有符号都链接进来,参数“-no-whole-archive”则是重置,以避免后面库的所有符号被链接进来。

部分Linux系统,程序需要依赖到pthread,但是提示没有依赖到,是因为-lpthread要写到gcc最后面

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向娇葵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值