0

我正在尝试将 postgresql 与 SOCI 一起使用,用 MinGW 构建他们的库。

我遇到了以下问题。

PostgreSQL 定义了这个结构@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_ttimespec.tv_spec类型的差异会是一个问题吗?
  • 什么是解决这种情况的好方法?

我正在使用 PostgreSQL 9.3 x86

4

1 回答 1

1

time_t并且long 可能是一个问题,尽管我觉得这不太可能。这是因为time_t通常定义为 a 的别名long

我不会更改 postgres 库中的宏,而是首先尝试将宏传递-D标志定义给编译器。

g++ -DHAVE_STRUCT_TIMESPEC -o prog file.cc
于 2014-07-11T19:40:27.290 回答