Bo *_*Gao 4 gcc msys static-linking
有没有办法静态链接MSYS2 gcc生成的.exe文件?我尝试了很多方法,但都没有奏效.所有生成的.exe文件都需要msys-2.0.dll,我想摆脱它.到目前为止,我尝试启用-ststic选项,-static-libgcc选项并将这些选项传递给-Wl,但它们不起作用.我试图剥离二进制文件,没有差别,但输出文件大小.我知道我可以在MSYS1.0 gcc中执行此操作,或者从Linux执行mingw-w64,但我无法在MSYS2.0中执行此操作.运行GCC -v后,它显示的工具链确实是用--enable-静态和--enable-共享和--enable-共享libgcc的编译.无论如何我有可以获得静态libgcc库吗?
我也遇到了这个问题 - 一个非常简单的终端程序,仅使用stdio.h和string.h,往往会出现“代码执行无法继续,因为找不到 msys-2.0.dll。重新安装程序可能会解决此问题。” 在普通终端中。
最后,这篇文章帮助解决了这个问题 - 但有一些微妙的问题,我将在这里指出。
现在,我的问题是这样的:
我从安装 MSYS2 开始;显然我已经在其中安装了GCC。
现在,即使我更改为 MINGW64 终端(而不是 MSYS2 终端)并重新编译,我也会遇到与 msys-2.0.dll 相同的问题。
最后,我想到检查 MINGW64 终端:
user@DESKTOP MINGW64 /c/
$ which gcc
/usr/bin/gcc
Run Code Online (Sandbox Code Playgroud)
请注意,如果您位于 MSYS2 shell 中,则此 - /usr/bin/gcc- 与您返回的路径完全相同。
因此,我尝试在 MINGW64 shell 中再次查找 gcc:
$ pacman -Ss gcc
mingw32/mingw-w64-i686-gcc 7.4.0-1 (mingw-w64-i686-toolchain)
GNU Compiler Collection (C,C++,OpenMP) for MinGW-w64
...
mingw64/mingw-w64-x86_64-gcc 8.2.1+20181214-1 (mingw-w64-x86_64-toolchain)
GNU Compiler Collection (C,C++,OpenMP) for MinGW-w64
...
msys/gcc 7.4.0-1 (msys2-devel) [installed]
The GNU Compiler Collection - C and C++ frontends
...
Run Code Online (Sandbox Code Playgroud)
啊哈,原来我没有安装mingw64 gcc- 我只安装了msys gcc!
所以,只需安装mingw64 gcc- 当然,从 MINGW64(不是 MSYS2)shell 内部:
user@DESKTOP MINGW64 /c/
$ pacman -S mingw-w64-x86_64-gcc
resolving dependencies...
looking for conflicting packages...
Packages (7) mingw-w64-x86_64-binutils-2.30-5 mingw-w64-x86_64-crt-git-7.0.0.5302.6c8f5629-1
mingw-w64-x86_64-headers-git-7.0.0.5302.6c8f5629-1 mingw-w64-x86_64-isl-0.19-1
mingw-w64-x86_64-windows-default-manifest-6.4-3 mingw-w64-x86_64-winpthreads-git-7.0.0.5273.3e5acf5d-1
mingw-w64-x86_64-gcc-8.2.1+20181214-1
Total Download Size: 51.55 MiB
Total Installed Size: 364.04 MiB
:: Proceed with installation? [Y/n] y
...
Run Code Online (Sandbox Code Playgroud)
此后,您需要关闭并重新打开 MINGW64 shell;一旦你这样做了,你可以看到:
user@DESKTOP MINGW64 /c/
$ which gcc
/mingw64/bin/gcc
Run Code Online (Sandbox Code Playgroud)
gcc...现在MINGW64 的路径是/mingw64/bin/gcc- 而 MSYS2 中的路径仍然存在/usr/bin/gcc。
因此,如果我现在gcc在 MINGW64 shell 中使用 进行编译,我会使用 进行编译/mingw64/bin/gcc,现在生成的 .exe 可以在通常的 Windows 命令提示符中运行,而不需要 msys-2.0.dll - 这很棒:)
好吧,我解决了.从MSYS2的文档中可以看出,MSYS2旨在通过使用通用的共享libc来缓解DLL地狱和错误.因此,它不打算创建静态链接的可执行文件.
但是,您可以从pacman安装mingw-w64软件包,并运行mingw64.exe来启动shell,而不是msys2.exe.通过这样做,您可以从bash而不是MSYS2版本安装和运行原始的mingw-w64编译器套件.
原始mingw-w64包生成的可执行文件是静态链接的.它不需要msys-2.0.dll,而是需要无处不在的msvcrt.dll.
| 归档时间: |
|
| 查看次数: |
2209 次 |
| 最近记录: |