PyImport_ImportModule("cStringIO") failure with undefined symbol

grbgooglefan ganeshborse at gmail.com
Thu Jan 31 05:49:29 EST 2008


On Jan 11, 9:31 am, "Borse, Ganesh" <ganesh.bo... at credit-suisse.com>
wrote:
> Hi,
> Can you please guide me for the following problem?
> The call to "PyImport_ImportModule("cStringIO");" is failing with an error of "undefined symbol:PyObject_SelfIter".
>
> Before importing this module, I am importing only the sys module.
>
>    Py_SetProgramName("/usr/bin/python");
>    Py_Initialize();
>    char* argv[] = { "python","-v",""};
>    PySys_SetArgv(2,argv);
>    PyRun_SimpleString("import sys");
>
>    PyObject *modStringIO = NULL;
>    // Import cStringIO module
>    modStringIO = PyImport_ImportModule("cStringIO");
>
> Should I be importing any other additional module(s) to make this import work?
>
> Please help.
>
> I am trying to use the function GetPythonErrorMessage provided in this post:http://groups.google.com/group/comp.lang.python/browse_thread/thread/...
>
> Thanks in advance for your help.
> Regards.
==========================================

Function "PyObject_SelfIter" is part of libPython.a. But when library
which is linked with libPython.a tries to import cStringIO (which is
nothing but dlopen("lib-dynload/cStringIO.so"), ld.so does not find
this symbol.
So, as a workaround, we can get the cStringIO.so also linked with the
library which has linked libPython.a.
By this we ensure that PyObject_SelfIter is already resolved in the
library.
Then at the time of importing cStringIO at runtime, this symbol is
already referenced & won't cause problems.



More information about the Python-list mailing list