python27.def尝试编织时出现“找不到符号表”

时间:2019-02-15 15:21:26

标签: python python-2.7 gcc mingw-w64

我正在尝试将编织与Python ANACONDA一起使用64位。由于编织需要Python 2.7,因此我创建了一个新的env来导入它,在代码执行过程中,事实证明缺少libpython27.a。所以我创建了这个库,即第一个创建了def文件,后来使用dll工具创建了库

C:\ProgramData\Anaconda3\envs\Python27>gendef python27.dll

C:\ProgramData\Anaconda3\envs\Python27>C:\MinGW64\bin\dlltool -v --dllname python27.dll --def python27.def --output-lib libpython27.a

创建库很好,但是在编织过程中,我找不到符号表。经过一些调试之后,这里有一个拒绝代码,它抱怨在新的python27.def中没有符号文件

File "C:\ProgramData\Anaconda3\envs\Python27\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 302, in generate_def
    raise ValueError("Symbol table not found")

ValueError: Symbol table not found

def dump_table(dll):
    st = subprocess.Popen(["objdump.exe", "-p", dll], stdout=subprocess.PIPE)
    return st.stdout.readlines()

def generate_def(dll, dfile):
    """Given a dll file location,  get all its exported symbols and dump them
    into the given def file.

    The .def file will be overwritten"""
    dump = dump_table(dll)
    for i in range(len(dump)):
        if _START.match(dump[i].decode()):
            break
    else:
        raise ValueError("Symbol table not found")

有什么想法吗??

1 个答案:

答案 0 :(得分:0)

经过更多调查,Anaconda发行版本提供了msvcr90.dll而没有 符号表。因此,当调用msvcr90.dll的generate_def(dll,dfile)时,它将生成一个空的def文件。

修复该问题的方法是在第352行mingw32compiler.py中添加返回False

def build_msvcr_library(debug=False):
    return False
    if os.name != 'nt':
        return False