Скомпилировать Python для встраивания библиотеки C на Windows, получил ошибку C2371: 'pid_t': переопределение; разные основные типы

0

Я искал в 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, произошли.

  • 0
    Проверьте, использует ли какой-либо из заголовочных файлов условную компиляцию (например, директивы препроцессора #if , #ifdef или #ifndef ) для этих объявлений. Если они это сделают, то добавьте #define (или #undef ) до того, как будет включен конкретный заголовочный файл, чтобы определение не было частью модуля перевода.
  • 0
    Как ваше предложение, я только что отредактировал его, это может не сработать.
Показать ещё 1 комментарий
Теги:
ace

1 ответ

0

Это не ошибка в ACE, это обходной путь для отсутствия этого типа в SDK Windows. Похоже, что разные продукты имеют разные способы обхода, которые могут вызвать конфликты. ACE 6.2.9 будет использовать ACE_LACKS_PID_T, который вы можете определить в файле ace/config.h.

  • 0
    Сегодня мы выпустили ACE 6.3.0, в котором есть поддержка отмены определения ACE_LACKS_PID_T, которая затем отключает typedef для pid_t в ACE.
  • 0
    @Vatel Вы пробовали ACE 6.3.0?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню