Я искал в google, эта проблема вызвана ошибкой ACE, здесь ссылка на ошибку: http://bugzilla.dre.vanderbilt.edu/show_bug.cgi?id=3190
В файле заголовка ACE os_types.h определите pid_t как
#if defined (ACE_WIN32) && !defined(__MINGW32__)
typedef long pid_t;
#elif defined (ACE_PSOS) && (!defined (ACE_PSOSIM) && defined (ACE_PSOS_CANT_USE_SYS_TYPES))
# if defined (ACE_PSOS_DIAB_PPC)
# define ACE_INVALID_PID ((pid_t) ~0)
# else /* !defined (ACE_PSOS_DIAB_PPC) */
typedef long pid_t;
# endif /* defined (ACE_PSOS_DIAB_PPC) */
typedef char* caddr_t;
#endif /* ACE_PSOS_CANT_USE_SYS_TYPES */
В файле заголовка Python pyconfig.h определите pid_t как
#endif /* MS_WIN32 && !MS_WIN64 */
typedef int pid_t;
Там нет такого #ifdef. Таким образом, должна быть ошибка переопределения.
Моя проблема в том, что я не могу изменить файл heads os_types в библиотеке ACE по некоторым причинам.
Есть ли другой способ обхода, кроме изменения этих двух файлов head?
Я добавляю следующий код:
#ifndef __MINGW32__
#define __MINGW32__
#endif
И некоторые ошибки, связанные с ACE, произошли.
Это не ошибка в ACE, это обходной путь для отсутствия этого типа в SDK Windows. Похоже, что разные продукты имеют разные способы обхода, которые могут вызвать конфликты. ACE 6.2.9 будет использовать ACE_LACKS_PID_T, который вы можете определить в файле ace/config.h.
#if
,#ifdef
или#ifndef
) для этих объявлений. Если они это сделают, то добавьте#define
(или#undef
) до того, как будет включен конкретный заголовочный файл, чтобы определение не было частью модуля перевода.