我是靠谱客的博主 开心火车,最近开发中收集的这篇文章主要介绍QT编写纯C接口,并解除依赖,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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最后面

最后

以上就是开心火车为你收集整理的QT编写纯C接口,并解除依赖的全部内容,希望文章能够帮你解决QT编写纯C接口,并解除依赖所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部