Ошибка "неправильный класс ELF" при использовании ctypes - PullRequest
3 голосов
/ 25 мая 2011

после перехода с 32-разрядной версии Ubuntu на 32-битный мой код python+ctypes+c99 не работает. Я до сих пор читал, что ошибка ./libfoo.so: wrong ELF class: ELFCLASS32 означает, что мой libfoo.so [1] является 32-битной библиотекой, а python хочет 64-битную версию. Как мне сказать gcc/ctypes сгенерировать библиотеку как 32Bit?

Спасибо за любые отзывы!

Сообщение об ошибке:

 File "foo.py", line 8, in <module>
    autofoo=cdll.LoadLibrary("./libfoo.so")
  File "/usr/lib/python2.6/ctypes/__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.6/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: ./libfoo.so: wrong ELF class: ELFCLASS32

[1] Я компилирую libfoo.so с gcc -c -std=c99 -lm -D_GNU_SOURCE -Wall -pedantic -fopenmp -ofoo.o foo.c

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Вам необходимо скомпилировать объектный файл как 64-битный и независимый от позиции, а затем связать объектный файл с общей библиотекой с 64-битными параметрами.Что-то вроде:

gcc -c -fPIC -m64 -std=c99 -lm -D_GNU_SOURCE -Wall -pedantic -fopenmp -o foo.o foo.c
gcc -m64 -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o

Это должно дать вам 64-битную библиотеку на любом наборе инструментов gnu, который я использовал.Если вы все еще получаете ошибки, возможно, что-то сломалось в вашей цепочке инструментов или в Python.

0 голосов
/ 16 сентября 2011

Переустановите крипто.

Так я решил эту проблему.

http://www.amk.ca/python/code/crypto.html

0 голосов
/ 25 мая 2011

Передача -m64 в gcc скажет ему построить 64-битный код, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...