Skip site navigation (1) Skip section navigation (2)

The incompaitiblity of libpq and non-GCC compilers

From: "Dann Corbit" <DCorbit(at)connx(dot)com>
To: <pgsql-hackers(at)postgresql(dot)org>
Subject: The incompaitiblity of libpq and non-GCC compilers
Date: 2004-03-31 21:22:06
Message-ID: D90A5A6C612A39408103E6ECDD77B829408D4F@voyager.corporate.connx.com (view raw or flat)
Thread:
Lists: pgsql-hackers
After making the following change in port.h:
/* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
/* open() replacement to allow delete of held files */
extern int	win32_open(const char*,int,...);
#ifdef _MSC_VER
#define 	open	win32_open
#else
#define 	open(a,b,...)	win32_open(a,b,##__VA_ARGS__)
#endif
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */

I can get a little further towards a build of libpq...

U:\postgresql-snapshot\src>nmake /f win32.mak

Microsoft (R) Program Maintenance Utility   Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

        cd include
        if not exist pg_config.h copy pg_config.h.win32 pg_config.h
        cd ..
        cd interfaces\libpq
        nmake /f win32.mak

Microsoft (R) Program Maintenance Utility   Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

Building the Win32 static library...

        cl.exe @u:\tmp\nma01920.
getaddrinfo.c
        cl.exe @u:\tmp\nmb01920.
thread.c
..\..\include\utils/elog.h(37) : warning C4005: 'ERROR' : macro
redefinition
        C:\Program Files\Microsoft SDK\Include\.\wingdi.h(98) : see
previous definition of 'ERROR'
        cl.exe @u:\tmp\nmc01920.
inet_aton.c
        cl.exe @u:\tmp\nmd01920.
crypt.c
        cl.exe @u:\tmp\nme01920.
path.c
        cl.exe @u:\tmp\nmf01920.
dllist.c
        cl.exe @u:\tmp\nmg01920.
md5.c
        cl.exe @u:\tmp\nmh01920.
ip.c
        cl.exe @u:\tmp\nmi01920.
wchar.c
        cl.exe @u:\tmp\nmj01920.
encnames.c
        cl.exe @u:\tmp\nmk01920.
win32.c
fe-auth.c
..\..\include\libpq/libpq-be.h(21) : fatal error C1083: Cannot open
include file: 'sys/time.h': No such file or directory
fe-protocol2.c
fe-protocol3.c
fe-connect.c
fe-exec.c
fe-lobj.c
C:\lang\VC98\include\io.h(176) : error C2375: 'pgrename' : redefinition;
different linkage
        ..\..\include\port.h(45) : see declaration of 'pgrename'
C:\lang\VC98\include\io.h(238) : error C2375: 'win32_open' :
redefinition; different linkage
        ..\..\include\port.h(55) : see declaration of 'win32_open'
C:\lang\VC98\include\io.h(244) : error C2375: 'pgunlink' : redefinition;
different linkage
        ..\..\include\port.h(46) : see declaration of 'pgunlink'
fe-misc.c
fe-print.c
fe-secure.c
pqexpbuffer.c
NMAKE : fatal error U1077: 'cl.exe' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'C:\lang\VC98\bin\NMAKE.EXE' : return code
'0x2'
Stop.

Some notions:
1.  For the macro ERROR above, we should #undef ERROR

2.  #include <sys/time.h> should have #ifndef _MSC_VER around it.  I did
this:
#ifndef _MSC_VER
#include <sys/time.h>
#endif

3.  For the errors in io.h, it appears that there are some macros that
redefine rename and unlink
I did this:
/*----------------------------------------------------------------------
---
 *
 * fe-lobj.c
 *	  Front-end large object interface
 *
 * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *	  $PostgreSQL: pgsql-server/src/interfaces/libpq/fe-lobj.c,v
1.48 2004/03/05 01:53:59 tgl Exp $
 *
 
*-----------------------------------------------------------------------
--
 */
#include "postgres_fe.h"

#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>

#ifdef WIN32
#include "win32.h"
#undef rename
#undef open
#undef unlink
#include "io.h"
#else
#include <unistd.h>
#endif

There remains one problem on the build -- an unresolved symbol:
U:\postgresql-snapshot\src>nmake /f win32.mak

Microsoft (R) Program Maintenance Utility   Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

        cd include
        if not exist pg_config.h copy pg_config.h.win32 pg_config.h
        cd ..
        cd interfaces\libpq
        nmake /f win32.mak

Microsoft (R) Program Maintenance Utility   Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

Building the Win32 static library...

        cl.exe @u:\tmp\nma02216.
fe-auth.c
        link.exe -lib @u:\tmp\nmb02216.
        cl.exe @u:\tmp\nmc02216.
libpqdll.c
        rc.exe /l 0x409 /fo".\Release\libpq.res" libpq.rc
        link.exe @u:\tmp\nmd02216.
   Creating library .\Release\libpqdll.lib and object
.\Release\libpqdll.exp
libpq.lib(fe-connect.obj) : error LNK2001: unresolved external symbol
_set_noblock
.\Release\libpq.dll : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: 'link.exe' : return code '0x460'
Stop.
NMAKE : fatal error U1077: 'C:\lang\VC98\bin\NMAKE.EXE' : return code
'0x2'
Stop.

This stuff really needs to be functional with compilers besides GCC
derivatives.

Responses

pgsql-hackers by date

Next:From: Stephan SzaboDate: 2004-03-31 21:29:44
Subject: Re: LIKE and Locale
Previous:From: Simon RiggsDate: 2004-03-31 20:33:43
Subject: Re: [HACKERS] Update on PITR

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group