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: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf
Of Geert Van Muylem
Sent: maandag 18 december 2006 22:51
To: python-list@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
--
http://mail.python.org/mailman/listinfo/python-list
--
http://mail.python.org/mailman/listinfo/python-list