2017-02-21 108 views
1

我知道網站上有很多類似的問題,但我找不到我的問題的答案。導入錯誤未定義符號(在Python中的C++模塊)ZTINSt8ios_base7failureB5cxx11E

我用Cython包裝C++類以便在Python3中使用它們。用setup.py建築外部模塊後,當我運行的Python程序,我得到了以下錯誤:

from "name of.pyx file" import "name of the class to import" Import error: /home/.../filename.so: undefined symbol: _ZTINSt8ios_base7failureB5cxx11E.

我在Ubuntu 16.04,我建立了從擴展使用命令行python3 setup.py build_ext --inplace終端,然後從終端或從蟒蛇中的Spyder運行.py(我在兩種情況下都得到了這個錯誤)。

從我讀的錯誤可能來自cython編譯,因爲我沒有鏈接某些庫。這是真的?如果是這樣,有人能解釋我該怎麼做嗎?

我讓你在這裏我的setup.py,在評論我試過的所有不同的設置。

setup.py

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

#setup(ext_modules = cythonize(
     #"pycoralv1.pyx",    # our Cython source 
     #sources=["coralv1cpp.cpp"], # additional source file(s) 
     #language="c++",    # generate C++ code 
    #)) 

#setup(ext_modules = cythonize(Extension(
#   "pyCoralv1",        # the extension name 
#   sources=["pyCoralv1.pyx", "Coralv1cpp.cpp"], # the Cython source and 
               # additional C++ source files 
#   language="c++",      # generate and compile C++ code 
#  ))) 

#setup(
# name = "testcoral", 
# ext_modules = cythonize('*.pyx'), 
#) 

ext_modules = [ 
    Extension(
     "pyCoralv1", 
     sources=["pyCoralv1.pyx", "Coralv1cpp.cpp"], 
     extra_compile_args=['-fopenmp',"-fPIC"], 
     extra_link_args=['-fopenmp',"-I", "/usr/include/glib-2.0", "-l", "glib-2.0", "-I", "/usr/lib/x86_64-linux-gnu/glib-2.0/include"], 
     language="c++", 
    ) 
] 

for e in ext_modules: 
    e.pyrex_directives = {"boundscheck": False} 

setup(
    name='Coral library', 
    ext_modules=cythonize(ext_modules), 
    include_dirs = [numpy.get_include()] 
) 
+0

這取決於什麼符號是未定義的。您可以使用['libraries'和'library_dirs'作爲Extension的參數來指定要鏈接到的內容](https://docs.python.org/3/distutils/setupscript.html#library-options)。但是有很多可能的是獲取未定義的符號,所以現在它不能回答。 – DavidW

+0

謝謝您的回答。問題是符號名稱是由Cython創建的,所以我無法識別問題的來源...... – bengo

回答

3

的問題是在蟒蛇安裝libgcc後問題:conda install libgcc,有一個失蹤的庫。

+0

這是一個C++標準庫符號,如果您想知道 – DavidW

相關問題