尝试使用 gcc 或 mingc 静态链接 cygwin 编译的程序,但存在问题

问题描述 投票:0回答:1

我有一个相当大的程序,多个 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

gcc cygwin mingw
1个回答
0
投票

Cygwin 是一种使用兼容层使用 GCC for Windows 进行构建的方法,位于

cygwin1.dll

您需要做的是使用 MinGW-w64 构建 native Windows 二进制文件。

您可以通过安装 MSYS2 并使用其包管理器安装 MinGW-w64 来获取它

pacman

或者,如果您不需要 *nix shell,您可以从 https://winlibs.com/

获取独立的 MinGW-w64 版本
© www.soinside.com 2019 - 2024. All rights reserved.