Cygwin - 鱿鱼出错

Posted

技术标签:

【中文标题】Cygwin - 鱿鱼出错【英文标题】:Cygwin - Squid make errors 【发布时间】:2014-04-17 20:49:29 【问题描述】:

我在 windows server 2008 r2 上完成了 cygwin 的完整安装,并下载了 Squid3.4.4 源代码。我运行了 ./configure [options] 命令,然后下一步是制作和安装 squid。

当我运行 make 时,我得到了大量的错误。这是我所看到的示例:

$ make make all in compat make[1]: 进入目录 '/home/Administrator/squid-3.4.4/compat' /bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I.. -I../include -I../lib -I../src -I../include -I/usr/include -I/usr/include -I /usr/include -I/usr/include -I/usr/include -I/usr/include -I/usr/include -I/usr/include -Wall -Wpointer-arith -Wwrite-strings -Wcmets -Wshadow -Werror -pipe -D_REENTRANT -g -O2 -march=native -std=c++0x -MT assert.lo -MD -MP -MF .deps/assert.Tpo -c -o assert.lo assert.cc libtool:编译: g++ -DHAVE_CONFIG_H -I.. -I../include -I../lib -I../src -I../include -I/usr/include -I/usr/include -I/usr/include -I/usr/include -I/usr/include -I/usr/include -I /usr/include -I/usr/include -Wall -Wpointer-arith -Wwrite-strings -Wcmets -Wshadow -Werror -pipe -D_REENTRANT -g -O2 -march=native -std=c++0x -MT assert.lo -MD -MP -MF .deps/assert.Tpo -c assert.cc -DDLL_EXPORT -DPIC -o .libs/assert.o 在 ../compat/compat.h:64:0 包含的文件中, 来自../include/squid.h:66, 来自 assert.cc:32: ../compat/os/mswindows.h:152:0: 错误:“O_RDONLY”重新定义 [-Werror] #define O_RDONLY _O_RDONLY ^ 在 /usr/include/sys/fcntl.h:3:0 包含的文件中, 来自 /usr/include/fcntl.h:14, 来自../compat/os/mswindows.h:48, 来自../compat/compat.h:64, 来自../include/squid.h:66, 来自 assert.cc:32: /usr/include/sys/_default_fcntl.h:34:0: 注意:这是 前面的定义 #define O_RDONLY 0 /* +1 == FREAD */ ^ In ../compat/compat.h:64:0 中包含的文件, 来自../include/squid.h:66, 来自 assert.cc:32: ../compat/os/mswindows.h:153:0: 错误:“O_WRONLY”重新定义 [-Werror] #define O_WRONLY _O_WRONLY ^ 在 /usr/include/sys/fcntl.h:3:0 包含的文件中, 来自 /usr/include/fcntl.h:14, 来自../compat/os/mswindows.h:48, 来自../compat/compat.h:64, 来自../include/squid.h:66, 来自 assert.cc:32: /usr/include/sys/_default_fcntl.h:35:0: 注意:这是 前面的定义 #define O_WRONLY 1 /* +1 == FWRITE */ ^ In ../compat/compat.h:64:0 中包含的文件, 来自../include/squid.h:66, 来自 assert.cc:32: ../compat/os/mswindows.h:154:0: 错误:“O_RDWR”重新定义 [-Werror] #define O_RDWR _O_RDWR ^ 在 /usr/include/sys/fcntl.h:3:0 包含的文件中, 来自 /usr/include/fcntl.h:14, 来自../compat/os/mswindows.h:48, 来自../compat/compat.h:64, 来自../include/squid.h:66, 来自 assert.cc:32: /usr/include/sys/_default_fcntl.h:36:0: 注意:这是 前面的定义 #define O_RDWR 2 /* +1 == FREAD|FWRITE */ ^ 在 ../compat/compat.h:64:0 中包含的文件中, 来自../include/squid.h:66, 来自 assert.cc:32: ../compat/os/mswindows.h:155:0: 错误:“O_APPEND”重新定义 [-Werror] #define O_APPEND _O_APPEND ^ 在 /usr/include/sys/fcntl.h:3:0 包含的文件中, 来自 /usr/include/fcntl.h:14, 来自../compat/os/mswindows.h:48, 来自../compat/compat.h:64, 来自../include/squid.h:66, 来自 assert.cc:32: /usr/include/sys/_default_fcntl.h:37:0: 注意:这是 先前的定义 #define O_APPEND _FAPPEND ^ 包含在文件中 来自../compat/compat.h:64:0, 来自../include/squid.h:66, 来自 assert.cc:32: ../compat/os/mswindows.h:157:0: 错误:“O_CREAT”重新定义 [-Werror] #define O_CREAT _O_CREAT ^ 在 /usr/include/sys/fcntl.h:3:0 包含的文件中, 来自 /usr/include/fcntl.h:14, 来自../compat/os/mswindows.h:48, 来自../compat/compat.h:64, 来自../include/squid.h:66, 来自 assert.cc:32: /usr/include/sys/_default_fcntl.h:38:0: 注意:这是 先前的定义 #define O_CREAT _FCREAT ^ 包含在文件中 来自../compat/compat.h:64:0, 来自../include/squid.h:66, 来自 assert.cc:32: ../compat/os/mswindows.h:158:0: 错误:“O_TRUNC”重新定义 [-Werror] #define O_TRUNC _O_TRUNC ^ 在 /usr/include/sys/fcntl.h:3:0 包含的文件中, 来自 /usr/include/fcntl.h:14, 来自../compat/os/mswindows.h:48, 来自../compat/compat.h:64, 来自../include/squid.h:66, 来自 assert.cc:32: /usr/include/sys/_default_fcntl.h:39:0: 注意:这是 先前的定义 #define O_TRUNC _FTRUNC ^ 包含在文件中 来自../compat/compat.h:64:0, 来自../include/squid.h:66, 来自 assert.cc:32: ../compat/os/mswindows.h:159:0: 错误:“O_EXCL”重新定义 [-Werror] #define O_EXCL _O_EXCL ^ 在 /usr/include/sys/fcntl.h:3:0 包含的文件中, 来自 /usr/include/fcntl.h:14, 来自../compat/os/mswindows.h:48, 来自../compat/compat.h:64, 来自../include/squid.h:66, 来自 assert.cc:32: /usr/include/sys/_default_fcntl.h:40:0: 注意:这是 先前的定义 #define O_EXCL _FEXCL ^ 包含在文件中 来自../compat/compat.h:64:0, 来自../include/squid.h:66, 来自 assert.cc:32: ../compat/os/mswindows.h:161:0: 错误:“O_TEXT”重新定义 [-Werror] #define O_TEXT _O_TEXT ^ 在 /usr/include/sys/fcntl.h:3:0 包含的文件中, 来自 /usr/include/fcntl.h:14, 来自../compat/os/mswindows.h:48, 来自../compat/compat.h:64, 来自../include/squid.h:66, 来自 assert.cc:32: /usr/include/sys/_default_fcntl.h:53:0: 注意:这是 之前的定义#define O_TEXT _FTEXT

我不熟悉 C++。有什么想法可能导致这种情况吗?

【问题讨论】:

【参考方案1】:

看起来您的构建试图多次定义相同的符号,大概是因为有一个兼容层试图定义它们,而在另一个地方有一个“正确”的定义。

我很想找到“重复定义”(看起来像是在 ./compat/mswindows.h 中),然后将 #ifdef O_RDONLY(定义的第一个符号)放在整个事物周围。

我不确定这是否能解决您的所有问题,但希望能朝着好的方向取得一些进展。

【讨论】:

以上是关于Cygwin - 鱿鱼出错的主要内容,如果未能解决你的问题,请参考以下文章

qt 5.7.0 配置后在 cygwin 中出错

安装 Msysgit 时出错 - Cygwin 似乎在您的系统路径中

在cygwin下easy_install'ing google-api-python-client时出错

在 Visual Studio 中使用 cygwin 编译的 dll 的库函数时出错

安装 gem 时出错:无法为 cygwin 的堆预留空间,Win32 错误 487

WINDOWS/cygwin编译lame出错:error: ‘_O_BINARY‘ undeclared