我有一个相当大的程序,多个 Mb,可以使用 gcc 和
cygwin1.dll
编译和运行良好,但我不知道如何静态编译它,以便我可以在没有 cygwin1.dll
的情况下分发它,它始终位于依赖项列表中.
据说这应该有效,但我不明白为什么它不起作用。我使用的是 gcc 11.4.0,大约一周前更新了 Cygwin。我需要这个的原因是使用 LGPL Cygwin 许可。
有人知道正确的方法吗?
使用 mingw 构建时,程序没有警告,但每次使用
sigsegv
时都会在 msvcrt!_lock
中得到 printf
,即使在主程序第一行中使用最简单的格式也是如此。一个简单的 hello world 程序使用 mingw 运行,但仅此而已 - 任何复杂的东西都有 sigsegv
。如果感觉我没有链接到 Windows 的正确根主程序中 - 除了我自己的 main() 对象之外,我没有在链接行上指定一个。
当我使用 mingw 时,我最终在
0x0
中访问内存 ntdll!LdrInitializeThunk()
失败。
我的 gcc 尝试包括使用
-static-libgcc -static-libstdc++ -static
并明确引用 /usr/lib/libcygwin.a
。
Cygwin 是一种使用兼容层使用 GCC for Windows 进行构建的方法,位于
cygwin1.dll
。
您需要做的是使用 MinGW-w64 构建 native Windows 二进制文件。
您可以通过安装 MSYS2 并使用其包管理器安装 MinGW-w64 来获取它
pacman
。
或者,如果您不需要 *nix shell,您可以从 https://winlibs.com/
获取独立的 MinGW-w64 版本