Fsu0413 / QtCompile

Personal build of Qt5 onwards, with SSL builtin. Multiple configuration available.
https://build-qt.fsu0413.me/
101 stars 12 forks source link

静态链接需要libgcc_s_seh-1,libstdc++-6和 libwinpthread-1动态库 #27

Closed L-Super closed 5 months ago

L-Super commented 6 months ago

我私以为静态链接,可以直接打包成一个exe,无需依赖其他动态库,但实际运行时发现需要libgcc_s_seh-1,libstdc++-6和 libwinpthread-1三个动态库。虽然可以通过指定静态链接形式,但libwinpthread似乎没有单独静态编译选项。 疑问:

  1. 静态链接是无法将这三个动态库也一起静态链接到Qt库里吗?
  2. libwinpthread可以单独静态编译吗?像-static-libstdc++选项一样,如果直接使用-static也可行,但好像就无法链接其他动态库?(未作验证)
Fsu0413 commented 6 months ago

您使用的是哪个版本的Qt库? 我这边先看看是不是因为Qt指定了动态的libwinpthread导致的。 比较新的Qt我应该是都在构建时指定了static-runtime的。。。

疑问解答:

  1. 可以静态链接。
  2. 没试过单独静态某个库。用 -static 是全静态link(我也没确认,只是看了help)。但是仅限于单次link。或者可以直接指定静态库路径(而不是用 -l)来直接指定静态库
Fsu0413 commented 6 months ago

https://github.com/niXman/mingw-builds/issues/674

有个类似的问题,在 mingw 那边报告的,可以参考

L-Super commented 6 months ago

您使用的是哪个版本的Qt库? 我这边先看看是不是因为Qt指定了动态的libwinpthread导致的。 比较新的Qt我应该是都在构建时指定了static-runtime的。。。

疑问解答:

  1. 可以静态链接。
  2. 没试过单独静态某个库。用 -static 是全静态link(我也没确认,只是看了help)。但是仅限于单次link。或者可以直接指定静态库路径(而不是用 -l)来直接指定静态库

用的Qt5.15.7

Fsu0413 commented 6 months ago

5.15.7 我本地已经删了,没法查了 翻了一下当时的脚本有 static-runtime。而且Qt5.15不使用OpenSSL,静态也不link mariadb 所以如果单用Qt就需要这几个库的话,只可能是Qt本身还在link pthread

试试我最新编的5.15.14吧,最好能给个最小程度的能复现问题的工程,这样我也能查查。。。

Fsu0413 commented 6 months ago

(居然点错close了

L-Super commented 6 months ago

5.15.7 我本地已经删了,没法查了 翻了一下当时的脚本有 static-runtime。而且Qt5.15不使用OpenSSL,静态也不link mariadb 所以如果单用Qt就需要这几个库的话,只可能是Qt本身还在link pthread

试试我最新编的5.15.14吧,最好能给个最小程度的能复现问题的工程,这样我也能查查。。。

我用的actions install static qt。工程是一个Clion创建的hello world。没有附加内容。 晚上回去试一下5.15.14有没有winpthread.dll依赖

Fsu0413 commented 6 months ago

我没有提供过actions。 如果用的是 https://github.com/orestonce/install-qt-static 的话,他那边的版本已经好久没升级了。。。

L-Super commented 6 months ago

我没有提供过actions。 如果用的是 https://github.com/orestonce/install-qt-static 的话,他那边的版本已经好久没升级了。。。

actions 使用静态库的就是从您这获取的。 版本没升级,所以让作者最近提供了Qt6的版本,哈哈哈。

Fsu0413 commented 5 months ago

由于没反馈,暂时关了哈