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

building and linking C user defined functions for the native win32 PG8.0 beta 3

From: Jean-Marc EBER <jeanmarc(dot)eber(at)lexifi(dot)com>
To: pgsql-hackers-win32(at)postgresql(dot)org
Subject: building and linking C user defined functions for the native win32 PG8.0 beta 3
Date: 2004-10-13 08:40:21
Message-ID: 416CE9F5.1050304@lexifi.com (view raw or flat)
Thread:
Lists: pgsql-hackers-win32
Hi all,

As I learned that a native win32 version of PG would be available soon, I began 
to look seriously at it (win32 support is necessary in our business). We began 
with a 7.xx standard version under Linux. After a few days of learing and 
documenting, we were able to create our own types, add user defined functions 
written in C and returning sets etc. Worked very well and nicely. Fine (and 
thanks to the Postgresql team!).

Now I tried to port this stuff to the win32 native version, building a dll that 
can be dynamically loaded by PG at run-time.

Our steps:

1.	Download the self extracting binaries and install them. No major problems 
encountered.
2.	Download the cvs 8.0beta3 snapshoot and build the native libpq.lib, libpq.dll 
with nmake etc. Seemed to work well.
3.	Try to link our code for building a dll. Here the problem begins:

-----------------------------------------------------------
link /nologo /dll /libpath:"c:\Program Files\mlfi\lib" \
           /libpath:"C:\postgresql\postgresql-snapshot\src\interfaces\libpq\Relea
se" \
           /libpath:"c:\program files\Microsoft Visual Studio\VC98\Lib" \
           /out:libudfs_wrapper.dll \
   libpq.lib udfs.obj udfs_wrapper.obj postgresql/pg_wrapper.obj \
   libcamlrun.lib
pg_wrapper.obj : error LNK2001: unresolved external symbol _MemoryContextAlloc
pg_wrapper.obj : error LNK2001: unresolved external symbol __imp__CurrentMemoryC
ontext
pg_wrapper.obj : error LNK2001: unresolved external symbol _Float8GetDatum
pg_wrapper.obj : error LNK2001: unresolved external symbol _pg_detoast_datum
pg_wrapper.obj : error LNK2001: unresolved external symbol _end_MultiFuncCall
pg_wrapper.obj : error LNK2001: unresolved external symbol _per_MultiFuncCall
pg_wrapper.obj : error LNK2001: unresolved external symbol _MemoryContextSwitchT
o
pg_wrapper.obj : error LNK2001: unresolved external symbol _init_MultiFuncCall
libudfs_wrapper.dll : fatal error LNK1120: 8 unresolved externals
make: *** [libudfs_wrapper.dll] Error 96

-----------------------------------------------------------

If I understand well, libpq is a library for building PG clients, but doesn’t 
contain "enough" functions to build "udf dlls".

So my question:

What is (or will be) the "official" way to achieve this goal for the win32 version ?

Did anybody achieve to build such a dll with native VC++ only (probably by 
achieving to compile the transitive closure of what is needed in backend/utils) ?

Or is one supposed to build such a dll through the "cygwin way" ? This would 
mean that one is taking a mingw or cygwin compiled PG (that should contain all 
needed object files and library files as .a and .o files), compile and link the 
own C udfs against these files for producing a dll ? Would such a dll be 
compatible with the native win32 binary version ?

Jean-Marc Eber



Responses

pgsql-hackers-win32 by date

Next:From: Bruce MomjianDate: 2004-10-13 09:51:36
Subject: Re: [pgsql-hackers-win32] Static build of libpq fails
Previous:From: Noreen JasterDate: 2004-10-12 23:50:59
Subject: Re: Static build of libpq fails

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