FW: Crash in PyImport_Import()

Geert Van Muylem Geert.Van.Muylem at skynet.be
Tue Dec 19 10:34:19 EST 2006


Hi,

 

And everything works fine if I link with the shared version of python.

The ldap extension works fine in the interpreter, as well as with embedded
python.

 

Does anyone knows why it seems to be needed that extension modules have to
be linked against the shared version 

of python?

 

Regards,

Geert

 

  _____  

From: python-list-bounces+geert.van.muylem=skynet.be at python.org
[mailto:python-list-bounces+geert.van.muylem=skynet.be at python.org] On Behalf
Of Geert Van Muylem
Sent: maandag 18 december 2006 22:51
To: python-list at python.org
Subject: Crash in PyImport_Import()

 

Hi, 

The following script works fine when I call it from the python interpreter 
but not when I call it from a c application (embedded python) 
It crashes in the PyImport_Import() 

import ldap 
import distutils.sysconfig 

def TestInit(): 

   l = ldap.open("192.168.1.2") 
   l.simple_bind_s("","") 
   l.search_s("c=BE", ldap.SCOPE_SUBTREE, "objectclass=*") 

   s = distutils.sysconfig.get_config_var('LINKFORSHARED') 


-> Python (2.5) and python-ldap (2.2.1) are recompiled for my environment
(hardened linux.)

Here is part of my makefile: 

VERSION = Python-2.5 

VERSION_LDAP = python-ldap-2.2.1 

compile: .python .python-ldap 

.python:        makefile.python .glibc $(VERSION).Setup.local 
                $(EXTRACT_PACKAGE) && \ 
                        $(CP) ../$(VERSION).Setup.local Modules/Setup.local
&& \ 
                        ./configure --prefix=/usr --enable-shared=no && \ 
                        make && \ 
                        make install 
                cp $(VERSION)/libpython2.5.a /usr/lib/libpython.a 
                (cd /usr/include; $(LN) -sf python2.5 python ) 
                touch .python 


.python-ldap: makefile.python .python .sasl .glibc .openldap
python-ldap.setup.cfg 
        (rm -rf $(VERSION_LDAP)  ||  /bin/true)  && \ 
        tar xjf $(ARCHIVE_PACKAGES)/$(VERSION_LDAP).tar.bz2  && \ 
        cd $(VERSION_LDAP) && \ 
                $(CP) ../python-ldap.setup.cfg setup.cfg && \ 
                python setup.py build && \ 
                python setup.py install 
        rm -rf $(VERSION_LDAP) 
        touch .python-ldap 


And my setup.cfg 

# Example for setup.cfg 
# You have to edit this file to reflect your system configuation 
# $Id: setup.cfg.suse-linux,v 1.1 2003/08/20 10:04:34 stroeder Exp $ 

[_ldap] 
# Section for compiling the C extension module 
# for wrapping OpenLDAP 2 libs 

library_dirs = /usr/lib/ /usr/lib/sasl2/ 
include_dirs = /usr/include/sasl/ /usr/include/sasl2/ 
extra_compile_args = 
extra_objects = 

# Example for full-featured SuSE build: 
# Support for StartTLS/LDAPS, SASL bind and reentrant libldap_r. 
# This needs recent OpenLDAP 2.0.26+ or 2.1.3+ built with 
#./configure --with-cyrus-sasl --with-tls 
libs = python ldap_r lber sasl2 ssl crypto resolv dl db m util pthread 

[install] 
# Installation options 
compile = 1 
optimize = 1 

Everything is done in a chroot-ed environment...when building python-ldap,
it uses 
the newly installed python includes.... 
The test application is linked against the static version libpython.a

 

int 

CPyLDAP::Init()

{

    m_iPython = 1;

 

    printf ("Before Py_Initialize...\n");

    Py_Initialize();

    printf ("After Py_Initialize...\n");

 

    PyObject *pName = PyString_FromString("PyTest");

    if ( pName != NULL )

    {

        // Load the Python module

                printf ("Before Import...\n");

        m_pModule = PyImport_Import(pName);

                printf ("After Import...\n");

        if (m_pModule != NULL)

        {

                m_iPython = 0;

                m_pDictionary = PyModule_GetDict(m_pModule);

        }

    }

    

    return (m_iPython);

}


Hope someone can give me a hint? 

thanks, 
Geert

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20061219/08abb7bd/attachment.html>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: ATT00080.txt
URL: <http://mail.python.org/pipermail/python-list/attachments/20061219/08abb7bd/attachment.txt>


More information about the Python-list mailing list