Since patches to support building postgres itself with newest version
of ActivePerl was commited into REL9_5_STABLE branch, I've tried to
build postgres with PL/Perl using this version of Perl. I'm using
Visual Studio 2013 Community edition.

It turns out that while ActiveState seems to drop support of embedding
their perl into msvc-compiled appications, there are just few minor
issues which prevent PL-perl to compile.

1. ActiveState Perl doesn't ship MSVC-build import library perl522.lib
for their perl522.dll. Instead they ship MINGW-build library

Visual Studio 2012 is able to link against this library. It is only
matter of modifing search expresions in to be able to find
this import library. Not sure if it stands true for all eariler
versions of Visual Studio, supported by Postgresql.

2. There is macro PERL_STATIC_INLINME in perl's lib/CORE/config.h file,
which produces compilation errors.

There are following comments there:

 *      This symbol, if defined, indicates that the C compiler supports
 *      C99-style static inline.  That is, the function can't be called
 *      from another translation unit.
 *      This symbol gives the best-guess incantation to use for static
 *      inline functions.  If HAS_STATIC_INLINE is defined, this will
 *      give C99-style inline.  If HAS_STATIC_INLINE is not defined,
 *      this will give a plain 'static'.  It will always be defined
 *      to something that gives static linkage.
 *      Possibilities include
 *              static inline       (c99)
 *              static __inline__   (gcc -ansi)
 *              static __inline     (MSVC)
 *              static _inline      (older MSVC)
 *              static              (c89 compilers)
#define HAS_STATIC_INLINE                               /**/
#define PERL_STATIC_INLINE static __inline__      /**/

Changing that macro to one described in the comments as "for MSVC" make
compilation errors to go away.  Unfortunately, I have no idea how to
fix this from within postgresql compilation process.

3. Fixing two issues above was enough to make build complete for 64-bit
windows target. With 32-bit build I'v got linking errors 
LINK2026: module unsafe for safeseh image

for all modules which are linked with perl DLL. I suspect that it is
not  a problem with DLL itself, it is rather related to way MINGW32
generates its import libraries. To fix this problem XML element
should be added inside <Link> element of the two vcxproj files which
link with perl - plperl.vcxproj and hstore_plperl.vcxproj.

It seems that this option appeared in VC2003, so it should be safe to

Hope that results of my experiments would be useful for someone.

                                   Victor Wagner <>

Sent via pgsql-hackers mailing list (
To make changes to your subscription:

Reply via email to