【发布时间】:2021-05-30 07:36:52
【问题描述】:
我的操作系统是 Windows x64
当我尝试使用 Cygwin 制作 ACE 时,出现以下编译错误:
In file included from /cygdrive/c/resources/ACE_wrappers/ace/OS_NS_Thread.h:30,
from /cygdrive/c/resources/ACE_wrappers/ace/Thread_Mutex.h:29,
from /cygdrive/c/resources/ACE_wrappers/ace/Log_Category.h:18,
from /cygdrive/c/resources/ACE_wrappers/ace/ACE.cpp:9:
/cygdrive/c/resources/ACE_wrappers/ace/os_include/os_sched.h:45:6: error: conflicting declaration ‘typedef struct cpu_set_t cpu_set_t’
45 | } cpu_set_t;
| ^~~~~~~~~
In file included from /usr/include/sys/_pthreadtypes.h:12,
from /usr/include/sys/types.h:223,
from /cygdrive/c/resources/ACE_wrappers/ace/os_include/sys/os_types.h:28,
from /cygdrive/c/resources/ACE_wrappers/ace/os_include/os_unistd.h:25,
from /cygdrive/c/resources/ACE_wrappers/ace/os_include/os_limits.h:25,
from /cygdrive/c/resources/ACE_wrappers/ace/Basic_Types.h:52,
from /cygdrive/c/resources/ACE_wrappers/ace/ACE.h:29,
from /cygdrive/c/resources/ACE_wrappers/ace/ACE.cpp:1:
/usr/include/sys/cpuset.h:27:3: note: previous declaration as ‘typedef struct cpu_set_t cpu_set_t’
27 | } cpu_set_t;
在尝试之前我已经完成的步骤:
1- 我使用安装程序安装了 Cygwin64,并安装了 gcc-g++、gcc-core、make、perl 和 binutils 包。
2- 我运行了 cygserver-config 脚本并成功完成。
3- 我从 https://download.dre.vanderbilt.edu/ 下载了 ACE,我从 Micro 版本中选择了“完整”ACE.zip (7.0.0)
4- 我创建了 config.h 文件,其中包含 #include "ace/config-cygwin32.h" 并将其放在 ACE_wrappers/ace/ 中
5- 我创建了 platform_macros.GNU,其中包含“include $(ACE_ROOT)/include/makeinclude/platform_cygwin32.GNU”,并将其放在 ACE_wrappers/include/makeinclude/ 中
6- 我打开 Cygwin64 shell 并执行以下操作: 导出 PATH=/cygdrive/c/cygwin64/bin:$PATH 导出 ACE_ROOT=/cygdrive/c/resources/ACE_wrappers
7- 我做了“cd $ACE_ROOT/ace”然后我“制作”了。
对于 gcc 版本(来自 Cygwin shell gcc -v):
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/cygdrive/c/cygwin64/bin/../lib/gcc/x86_64-pc-cygwin/10/lto-wrapper.exe
Target: x86_64-pc-cygwin
Configured with: /mnt/share/cygpkgs/gcc/gcc.x86_64/src/gcc-10.2.0/configure --srcdir=/mnt/share/cygpkgs/gcc/gcc.x86_64/src/gcc-10.2.0 --prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc --docdir=/usr/share/doc/gcc --htmldir=/usr/share/doc/gcc/html -C --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --libexecdir=/usr/lib --with-gcc-major-version-only --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --enable-__cxa_atexit --with-dwarf2 --with-tune=generic --enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-graphite --enable-threads=posix --enable-libatomic --enable-libgomp --enable-libquadmath --enable-libquadmath-support --disable-libssp --enable-libada --disable-symvers --with-gnu-ld --with-gnu-as --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix --without-libintl-prefix --with-system-zlib --enable-linker-build-id --with-default-libstdcxx-abi=gcc4-compatible --enable-libstdcxx-filesystem-ts
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.0 (GCC)
【问题讨论】:
-
检查为什么
/cygdrive/c/resources/ACE_wrappers/ace/os_include/os_sched.h定义cpu_set_t而不是重用/usr/include/sys/cpuset.h定义,内容差异是什么 -
cpu_set_t 在 /cygdrive/c/resources/ACE_wrappers/ace/os_include/os_sched.h 中定义:
#if !defined (__cpu_set_t_defined) || !defined (ACE_HAS_CPU_SET_T) #if defined (ACE_HAS_CPUSET_T) typedef cpuset_t cpu_set_t; #elif !defined (ACE_HAS_CPU_SET_T) # define ACE_CPU_SETSIZE 1024<br/> typedef struct { ACE_UINT32 bit_array_[ACE_CPU_SETSIZE / (8 * sizeof (ACE_UINT32))]; } cpu_set_t; #endif #endif在 /usr/include/sys/cpuset.h 中:typedef struct { __cpu_mask __bits[__CPU_GROUPMAX]; } cpu_set_t;