2016-12-19 64 views
0

我的問題如下。我工作的Ubuntu,有一個cython代碼,我編譯使用如下:Python:導入cython編譯庫的ELF頭文件無效

from distutils.core import setup 
from Cython.Build import cythonize 
import numpy 

setup(
    ext_modules = cythonize("cython_accelerate.pyx"), 
    include_dirs = [numpy.get_include()] 
) 

編制工作正常。當我嘗試導入生成的庫(cython_accelerate.so)我得到以下錯誤:

invalid ELF header.

如果我在Mac上的一切完全一樣的程序完美的作品:唯一不同的是,庫與生成不同的名稱(cython_accelerate.cpython-35m-darwin.so),但導入按預期工作,沒有問題。

我在做什麼錯?

+0

是什麼'file'說對生成的'.so'文件的類型? binutils工具如nm可以成功解析它嗎?什麼*確切*是您的本地平臺(架構和操作系統)?我們真的需要更多的細節來診斷這一點 - 理想的完整步驟來重現。 –

回答

1

I'm working on Ubuntu

這是一個毫無意義的說法。可能您在x86_64系統上使用Ubuntu。

如果是這樣,您的問題很可能是由於32位與64位不匹配造成的:您試圖將32位cython_accelerate.so導入64位Python進程,反之亦然。

要驗證這是原因,運行

file `which python` 
file /path/to/cython_accelerate.so 
+0

感謝您的評論。我得到以下: file'which python' - >/usr/bin/python:符號鏈接到'python2.7' file cython_accelerate.so - > ELF 64位LSB共享對象,x86-64,版本1 (SYSV),動態鏈接,BuildID [sha1] = 4b36e56da7adbc0cda2411aa72d146f4fc7e9864,未剝離 –