我有一个相当大的程序,多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
。
1条答案
按热度按时间pvcm50d11#
Cygwin是一种使用兼容层(位于
cygwin1.dll
中)构建GCC for Windows的方法。您需要做的是使用MinGW-w 64构建 * 本机 * Windows二进制文件。
您可以通过安装MSYS2并使用其包管理器
pacman
安装MinGW-w 64来获得它。或者,如果你不需要 *nix shell,你可以从https://winlibs.com/获得一个独立的MinGW-w 64版本