Problem when import C model

cmdrrickhunter@yaho.com conrad.ammon at gmail.com
Mon Jul 3 05:42:37 EDT 2006


this is more of a linux question than a python question, so you may get
better luck with asking there.

What you describe makes perfect sense to me.  If python is a 64 bit
program, it can only link to 64 bit libraries.  If you compiled your
library in 32-bit mode, then the library headers will indicate this,
and linux's library loading code will ignore it when loading libraries
for 64-bit programs.

I think there' might be a trick that lets you compile ELF files with
both 64-bit and 32-bit code, but actually doing so is outside of my
expertise.
baileyxia at gmail.com wrote:
> Hi, all
> I am learning how to import c code in python.
> Here is my simple code foo.c:
> =====================
> #include <Python.h>
> void bar()
> {
>   printf("Hello! C wrap!");
> }
> static PyObject *foo_bar(PyObject *self, PyObject *args) {
> /* Do something interesting here. */
>   bar();
>   Py_RETURN_NONE;
> }
> static PyMethodDef foo_methods[] = {
>   { "bar", (PyCFunction)foo_bar, METH_NOARGS, NULL },
>   { NULL, NULL, 0, NULL }
> };
> PyMODINIT_FUNC initfoo() {
>   Py_InitModule3("foo", foo_methods, "My first extension module.");
> }
> =====================
> I use gcc to compile the foo.c:
> gcc -shared -I/usr/local/python/2.4.2/include/python2.4 -fPIC foo.c -o
> foo.so
>
> Problem is:
> I can import foo on linux 64-bit platform if I also run gcc on linux
> 64-bit platform.
> But I can not import foo on linux 64-bit platform if I run gcc on linux
> 32-bit platform.
> Here is the error messege:
> =====================
> traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> ImportError: ./foo.so: cannot open shared object file: No such file or
> directory
> =====================
>
> I can not figure out what cause this problem. wrong gcc option? wrong
> python code?




More information about the Python-list mailing list