从 32 位 Ubuntu 安装更改为 64 位后,我的 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] 我用 gcc -c -std=c99 -lm -D_GNU_SOURCE -Wall -pedantic -fopenmp -ofoo.o foo.c
编译 libfoo.so
最佳答案
您需要将目标文件编译为 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 中可能有问题。
关于python - 使用 ctypes 时出现错误 "wrong ELF class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6126005/