cython 模块引发 ImportError,即使我链接了必要的静态库

cython module raises ImportError even though I'm linking in the necessary static libs

提问人:ckot 提问时间:2/2/2015 最后编辑:ckot 更新时间:1/31/2017 访问量:351

问:

我的cython模块构建良好,但是当我尝试导入它时,出现以下错误:

ImportError: ./pyflite.so: undefined symbol: basic_ff_register

这是我 setup.py。

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [Extension("pyflite",
                         ["pyflite.pyx"],
                         extra_objects=[
                                   "/usr/local/lib/libflite.a",
                                   "/usr/local/lib/libflite_cmulex.a",
                                   "/usr/local/lib/libflite_usenglish.a",
                                   "/usr/local/lib/libflite_cmu_us_slt.a"])]

setup(
  name = 'pyflite',
  cmdclass = {'build_ext': build_ext},
  ext_modules = ext_modules
)

如您所见,由于库是静态的,因此我不得不将它们添加到而不是extra_objectslibraries

这是让我感到困惑的地方:

nm -o --defined-only /usr/local/lib/*.a | grep 'basic_ff_register'

/usr/local/lib/libflite.a:cst_ffeatures.o:00000000000017a0 T basic_ff_register

这难道不意味着我正在链接的函数吗?libflite.a

任何帮助将不胜感激,

-斯科特

python static-libraries cython distutils undefined-reference

评论


答:

0赞 Carlo Benussi 1/31/2017 #1

尝试颠倒链接静态库的顺序。libflite.a(缺少符号的地方)不应该是第一个。