在Windows 7-64上使用cygwin编译gcc-7-20170212,==> wopen错误

时间:2017-03-01 16:49:25

标签: gcc cygwin windows-7-x64

在cygwin下的Windows7-64上编译gcc时出现以下错误。

./../zlib/libz.a(libz_a-gzlib.o):gzlib.c:(.text+0x646): undefined reference to `_wopen'
./../zlib/libz.a(libz_a-gzlib.o):gzlib.c:(.text+0x646): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `_wopen'
collect2: error: ld returned 1 exit status
make[3]: *** [../.././gcc/fortran/Make-lang.in:97: f951.exe] Error 1

什么是wopen?

gcc-6或gcc-5不会发生这种情况。

谢谢。

2 个答案:

答案 0 :(得分:5)

这对于构建gcc来说不是一个问题,就像构建zlib一样,gcc包含了一个销售副本。

如果您在Cygwin中安装了zlib-devel软件包,则可能不需要构建销售的zlib。你可能还需要向gcc的./configure调整一些标志,但我承认我还没有仔细看看。

也就是说,要在Cygwin上构建zlib,需要以下补丁:https://github.com/Alexpux/MSYS2-packages/raw/master/zlib/1.2.11-cygwin-no-widechar.patch
https://github.com/Alexpux/MSYS2-packages/blob/master/zlib/1.2.7-zlib-symbols.patch

(虽然后者不适用于1.2.11。)这是因为试图让gzopen_w对Cygwin起作用不太正确,因为Cygwin没有{{1 }}

答案 1 :(得分:0)

FWIW,我遇到了相同的错误(使用CYGWIN_NT-10.0 x86_64和最新的zlib-1.2.11),以下破解解决了该问题:

$  cd /tmp/zlib-1.2.11    # i.e., go into main dir
$  sed -i 's/defined(_WIN32) || defined(__CYGWIN__)/defined(_WIN32)/g' gzguts.h
$  make install     # etc.: no more _wopen(...) error

请不要因为缺乏解释或理解而解雇我...对我自己来说,我很高兴找到该修复程序,希望它可以对其他人有所帮助。