使用ctypes错误“ ELF类错误”

| 从32位安装到64位Ubuntu安装后,我的
python+ctypes+c99
代码被破坏了。到目前为止,我读到错误
./libfoo.so: wrong ELF class: ELFCLASS32
意味着我的
libfoo.so
[1]是32Bit库,而python需要64Bit版本。如何告诉
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]我用
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中的某些错误。     
如果可能,将g8cc传递给gcc将告诉它构建64位代码。     
重新安装加密货币。 这就是我解决这个问题的方法。 http://www.amk.ca/python/code/crypto.html     

要回复问题请先登录注册