Re: BUG #17365: Error: redefinition of 'stat' in win32_port.h when including postgres.h

From: Mario Emmenlauer <mario(at)emmenlauer(dot)de>
To: Julien Rouhaud <rjuju123(at)gmail(dot)com>, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #17365: Error: redefinition of 'stat' in win32_port.h when including postgres.h
Date: 2022-01-16 15:06:45
Message-ID: b6329de3-4200-946f-610c-b77816b4a858@emmenlauer.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


Hi Julien,

On 13.01.22 13:23, Julien Rouhaud wrote:
> On Thu, Jan 13, 2022 at 09:11:45AM +0000, PG Bug reporting form wrote:
>> The following bug has been logged on the website:
>>
>> Then I build a wrapper library that uses `postgres.h` in my code. My code is
>> built using the LLVM Clang-Cl compiler frontend version 13.0.0 over
>> Microsoft Visual Studio 19.5. Generally, the Clang-Cl compiler frontend
>> works very well. But since updating PostgreSQL from 13.x to the 14.1
>> release, I get an error:
>> ```
> [...]
>> C:\BDA\bld\XTJyb_7r\0\DatabaseHandler\src\BDAPGResult.cc
>> In file included from
>> C:\BDA\bld\XTJyb_7r\0\DatabaseHandler\src\BDAPGResult.cc:31:
>> In file included from C:\data\ci-dst\Debug\include\server\postgres.h:46:
>> In file included from C:\data\ci-dst\Debug\include\server/c.h:1362:
>> In file included from C:\data\ci-dst\Debug\include\server/port.h:26:
>> C:\data\ci-dst\Debug\include\server/port/win32_port.h(256,8): error:
>> redefinition of 'stat'
>> struct stat /* This should match
>> struct __stat64 */
>> ^
>> C:\Program Files (x86)\Windows
>> Kits\10\include\10.0.19041.0\ucrt\sys/stat.h(87,12): note: previous
>> definition is here
>> struct stat
>> ^
>> 1 error generated.
>> ```
>
> Note that postgres.h is intended for backend-side code, and I'm assuming that
> your wrapper library is client code? Have you tried using postgres_fe.h
> instead?

Actually I do not really mean to include `postgres.h`. But I do want
to identify result types with `Oid vOID = ::PQftype(mResult.get(), vColumn);`
to check the result type. And the types seem to be defined in header
`catalog/pg_type.h` which only worked when `postgres.h` was included before.

I guess I'm off the standard track here. Its not completely mandatory for
me to identify the result types. But it was quite nice to be able to do
so.

Is this actually unsupported? Or am I doing something wrong?

All the best,

Mario

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Mario Emmenlauer 2022-01-16 15:14:19 Re: BUG #17365: Error: redefinition of 'stat' in win32_port.h when including postgres.h
Previous Message Tomas Barton 2022-01-16 13:05:23 pg_upgrade --check doesn't check pg_pltemplate modifications