python - 使用 ctypes 时出现错误 "wrong ELF class"

标签 python gcc 32bit-64bit ctypes

从 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/

相关文章:

python - 如何在 Pharo Smalltalk 中加载 Python 解析器?

python - 如何在 Tkinter 中实现 Canvas 项目的平滑移动?

C 从 2 个函数调用中获取函数行号

.net - 如何确定(通过代码)汇编器 corflags?

python - 大型 python 列表的内存要求是什么?

python - 如何在python中装饰一个生成器

python - Pandas read_excel 百分比作为字符串

c - 没有与 GCC 的内存对齐

c++ - 在C++中存储未知大小的表

memory - Eclipse 内存分析器 : Unable to attach to 32-bit process