从32位改为64位的Ubuntu安装后,我的python+ctypes+c99
代码被破坏了。到目前为止,我了解到错误./libfoo.so: wrong ELF class: ELFCLASS32
意味着,我的libfoo.so
[1]是一个32位库,python需要64位版本。如何告诉gcc/ctypes
将库生成为32位?
谢谢你的反馈!
错误消息:
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
最佳答案
您需要将对象文件编译为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
这应该可以在我使用过的任何gnu工具链上为您提供一个64位库。如果仍有错误,则可能是您的工具链或Python中出现了问题。