Thread: Unable to build python extension with PGXS

Unable to build python extension with PGXS

From
Jim Nasby
Date:
Attempting to build a python extension, I'm getting:

Undefined symbols for architecture x86_64:
   "_PyErr_Clear", referenced from:
       _PLyNdarray_FromDatum in pg_ndarray.o
       _PLyObject_To_ndarray in pg_ndarray.o
   "_PyImport_ImportModule", referenced from:
       _PLyNdarray_FromDatum in pg_ndarray.o
       _PLyObject_To_ndarray in pg_ndarray.o
   "_PyObject_CallFunction", referenced from:
       _PLyNdarray_FromDatum in pg_ndarray.o
       _PLyObject_To_ndarray in pg_ndarray.o
   "_PyObject_GetAttrString", referenced from:
       _PLyNdarray_FromDatum in pg_ndarray.o
       _PLyObject_To_ndarray in pg_ndarray.o
   "_PyString_AsString", referenced from:
       _PLyObject_To_ndarray in pg_ndarray.o
   "_PyString_FromStringAndSize", referenced from:
       _PLyNdarray_FromDatum in pg_ndarray.o
   "_PyString_Size", referenced from:
       _PLyObject_To_ndarray in pg_ndarray.o
ld: symbol(s) not found for architecture x86_64

I've included $(python_includespec) in my Makefile:

override CPPFLAGS := $(python_includespec) $(CPPFLAGS)

Is there some other magic I need? Do I need to switch to using
MODULE_big or something?
--
Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX
Experts in Analytics, Data Architecture and PostgreSQL
Data in Trouble? Get it in Treble! http://BlueTreble.com


Re: Unable to build python extension with PGXS

From
Jim Nasby
Date:
On 1/12/16 10:04 PM, Jim Nasby wrote:
> Attempting to build a python extension, I'm getting:
>
> Undefined symbols for architecture x86_64:
>    "_PyErr_Clear", referenced from:
>        _PLyNdarray_FromDatum in pg_ndarray.o
>        _PLyObject_To_ndarray in pg_ndarray.o
>    "_PyImport_ImportModule", referenced from:
>        _PLyNdarray_FromDatum in pg_ndarray.o
>        _PLyObject_To_ndarray in pg_ndarray.o
>    "_PyObject_CallFunction", referenced from:
>        _PLyNdarray_FromDatum in pg_ndarray.o
>        _PLyObject_To_ndarray in pg_ndarray.o
>    "_PyObject_GetAttrString", referenced from:
>        _PLyNdarray_FromDatum in pg_ndarray.o
>        _PLyObject_To_ndarray in pg_ndarray.o
>    "_PyString_AsString", referenced from:
>        _PLyObject_To_ndarray in pg_ndarray.o
>    "_PyString_FromStringAndSize", referenced from:
>        _PLyNdarray_FromDatum in pg_ndarray.o
>    "_PyString_Size", referenced from:
>        _PLyObject_To_ndarray in pg_ndarray.o
> ld: symbol(s) not found for architecture x86_64
>
> I've included $(python_includespec) in my Makefile:
>
> override CPPFLAGS := $(python_includespec) $(CPPFLAGS)
>
> Is there some other magic I need? Do I need to switch to using
> MODULE_big or something?

After some Screwing Around(TM), I figured out that the magic trick is to
add the output of python-config --ldflags to LDFLAGS. I see we have a
$(perl_embed_ldflags), should there be something similar for python?
--
Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX
Experts in Analytics, Data Architecture and PostgreSQL
Data in Trouble? Get it in Treble! http://BlueTreble.com


Re: Unable to build python extension with PGXS

From
Jim Nasby
Date:
On 1/13/16 3:11 PM, Jim Nasby wrote:
> On 1/12/16 10:04 PM, Jim Nasby wrote:
>> Attempting to build a python extension, I'm getting:
>>
>> Undefined symbols for architecture x86_64:
>>    "_PyErr_Clear", referenced from:
>>        _PLyNdarray_FromDatum in pg_ndarray.o
>>        _PLyObject_To_ndarray in pg_ndarray.o

In case anyone runs into this in the future, my eventual solution was
https://github.com/decibel/PandaPost/blob/master/Makefile
--
Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX
Experts in Analytics, Data Architecture and PostgreSQL
Data in Trouble? Get it in Treble! http://BlueTreble.com