Исправление совместимости lib c ++ mingw и postgresql

0

Я пытаюсь использовать postgresql вместе с SOCI, создавая их библиотеки с MinGW.

Я столкнулся с следующей проблемой.

PostgreSQL определяет этот strcuture @pthread.h:

#ifndef HAVE_STRUCT_TIMESPEC
#define HAVE_STRUCT_TIMESPEC 1
struct timespec {
    long tv_sec;
    long tv_nsec;
};
#endif /* HAVE_STRUCT_TIMESPEC */

Но в компилятор есть такая структура @timeb.h

#ifndef _TIMESPEC_DEFINED
#define _TIMESPEC_DEFINED
struct timespec {
    time_t  tv_sec;   /* Seconds */
    long    tv_nsec;  /* Nanoseconds */
};

struct itimerspec {
    struct timespec  it_interval;  /* Timer period */
    struct timespec  it_value;     /* Timer expiration */
};
#endif

Это вызывает дублирование объявления timespec. Мои вопросы:

  • Могу ли я просто отредактировать макросы в postgresql, чтобы избежать объявления этого объявления дважды?
  • Если да, то будет ли эта time_t и длинная разница типа timespec.tv_spec проблемой?
  • Что было бы хорошим способом исправить эту ситуацию?

Я использую PostgreSQL 9.3 x86

Теги:
mingw
soci

1 ответ

1
Лучший ответ

time_t и long может быть проблемой, хотя я считаю это очень маловероятным. Это связано с тем, что time_t обычно определяется как псевдоним long.

Вместо того, чтобы менять макросы в библиотеках postgres, я сначала попытался бы определить макрос, -D флаг -D компилятору.

g++ -DHAVE_STRUCT_TIMESPEC -o prog file.cc
  • 0
    Здравствуйте! Спасибо за ваш ответ! Как я могу передать эти параметры для сборки с помощью cmake?
  • 1
    Ваш ответ здесь: stackoverflow.com/questions/5352074/…

Ещё вопросы

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