Package: python-mysqldb
Version: 1.2.2-7
On Debian GNU/Linux 5.0 (lenny). Python 2.5.2-3.
When python is embedded in a shared library (in my case a plugin), the
_mysql.so component of MySQLdb fails to load, due to this error:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: /var/lib/python-support/python2.5/_mysql.so: undefined
symbol: PyExc_ImportError
Discovered while trying to use the ida2sql.py script within IDAPython.
A simple example program is attached demonstrating the problem clearly,
this sample program also demonstrates a work-around, by setting the
RTLD_GLOBAL flag when loading the shared library, the necessary python
symbols are exported for _mysql.so and it loads correctly. Unfortunately
this isn't possible in my situation since IDA Pro is not open source,
and in general I think it's unwise for an application to export all the
symbols from any plugins it may load as there is a high probability of a
symbol collision.
I have also been able to work around this issue by re-linking _mysql.so
and including a direct dependancy on libpython2.5.so.1.0. This may not
be the right thing to do when using MySQLdb from the standard python
interpreter however?
#include <stdio.h>
#include <dlfcn.h>
int main(int argc) {
int flags = (argc > 1) ? RTLD_LAZY | RTLD_GLOBAL : RTLD_LAZY;
void *h = dlopen("./pysql.so", flags);
if (h) {
void *s = dlsym(h, "pysql");
if (s) {
((void (*)())s)();
} else {
fprintf(stderr, "Unresolved: pysql\n");
}
} else {
perror("loading pysql.so");
}
return 0;
}
#include <Python.h>
void pysql() {
Py_Initialize();
PyRun_SimpleString("import _mysql\nprint 'Got here'");
Py_Finalize();
}
pymain: pymain.c pysql.so
gcc -o pymain pymain.c -ldl
pysql.so: pysql.c
gcc -shared -o pysql.so -I/usr/include/python2.5 pysql.c -lpython2.5
_______________________________________________
Python-modules-team mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/python-modules-team