概述
QT编译的DLL文件有3个基础依赖
libgcc_s_dw2-1.dll
,libstdc++-6.dll
和libwinpthread-1.dll
libgcc_s_dw2-1.dll
是C的依赖
libstdc++-6.dll
是C++的依赖
libwinpthread-1.dll
是libstdc++-6.dll
的依赖
编译.cpp
的话就有上诉三个需要依赖的玩意儿
编译.c
的话就只有libgcc_s_dw2-1.dll
一个玩意儿
但是要做出来的接口要让其他没有这些依赖的环境去用的话,就必须静态编译进去
就可以使用QMAKE_LFLAGS += -static
这样就可以静态编译,但是也有别的副作用
单独消除的话就QMAKE_LFLAGS += -static-libstdc++ -static-libgcc
因为libwinpthread-1.dll
是libstdc++-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接口,并解除依赖所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复