尝试使用gcc或mingc静态链接一个cygwin编译的程序

j2qf4p5b  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(95)

我有一个相当大的程序,多Mb,使用gcc和cygwin1.dll编译和运行良好,但我不知道如何静态编译它,以便我可以在没有cygwin1.dll的情况下分发它,它总是在依赖列表中。
这是据称应该工作,但我不知道为什么它不.我在gcc 11.4.0与Cygwin更新约一周前.我需要这个的原因是使用LGPL Cygwin许可.
有没有人有正确的方法来做这件事的任何指针?
当使用mingw构建时,程序没有警告,但在任何时候我使用printf时,都会在msvcrt!_lock中获得sigsegv,即使在主程序的第一行最琐碎的格式。一个琐碎的hello world程序使用mingw工作,但这就是全部-任何复杂的东西都有sigsegv。如果感觉我没有链接到正确的windows根主程序-我没有在链接行上指定一个对象,而是用我自己的main()指定一个对象。
当我使用mingw时,我最终在访问ntdll!LdrInitializeThunk()中的内存0x0时失败。
我的gcc尝试包括使用-static-libgcc -static-libstdc++ -static和显式引用/usr/lib/libcygwin.a

pvcm50d1

pvcm50d11#

Cygwin是一种使用兼容层(位于cygwin1.dll中)构建GCC for Windows的方法。
您需要做的是使用MinGW-w 64构建 * 本机 * Windows二进制文件。
您可以通过安装MSYS2并使用其包管理器pacman安装MinGW-w 64来获得它。
或者,如果你不需要 *nix shell,你可以从https://winlibs.com/获得一个独立的MinGW-w 64版本

相关问题