undefined symbol: PyObject_GenericGetAttr when trying to embed Python

Rick Ratzel rick.ratzel at scd.magma-da.com
Fri Jun 4 17:02:33 CEST 2004

    You may have to link your app with some additional flags.  You can 
use the distutils module to see which ones you need for loading shared 
objects (like _socket.so) at runtime.  Here is what my Python build for 
Linux needs (from http://elmer.sourceforge.net/PyCon04 ):

 >>> import distutils.sysconfig
 >>> distutils.sysconfig.get_config_var("LINKFORSHARED")
'-Xlinker -export-dynamic'

    Then, simply add -Xlinker -export-dynamic to the link line for the 
embedded Python app and the .so modules should have all the proper 
symbols resolved.  Hope that helps,

-Rick Ratzel

Andreas Jung wrote:
> I am trying to embed Python within a C++ application (Linux, Python2.3.4).
> I am using the example from the example from the "Embeding and 
> Extending" docs.
> This works fine importing a simple module without any imports. However 
> when I add
> an "import urllib" inside the Python script to be imported through my 
> C++ application
> then the import fails:
> Traceback (most recent call last):
>  File "/home/ajung/sandboxes/HR2/hr2_zope_wrapper/hr2_wrapper.py", line 
> 16, in hr2_wrapper
>    import urllib
>  File "/opt/python-2.3.4/lib/python2.3/urllib.py", line 26, in ?
>    import socket
>  File "/opt/python-2.3.4/lib/python2.3/socket.py", line 44, in ?
>    import _socket
> ImportError: /opt/python-2.3.4/lib/python2.3/lib-dynload/_socket.so: 
> undefined symbol: PyObject_GenericGetAttr
> Any ideas?
> Andreas

More information about the Python-list mailing list