【问题标题】:Python embedded C code compilation errorPython嵌入式C代码编译错误
【发布时间】:2015-11-29 14:42:12
【问题描述】:

我最近买了一台新电脑,并试图将一个 python 项目从我的旧电脑移到我的新电脑上。 python 项目使用了一些directx9 C++ 代码(带有#include )来截取屏幕截图并编译这个我使用G++ 的C++ 文件。

在不更改任何代码的情况下,安装 G++ 和 Python 后,我发现我用来编译代码的内容返回错误:

    g++ -std=c++11 -shared -IC:\Python27\include -LC:\Python27\libs ScreenShots/PictureStr.cpp -lpython27 -ld3d9 -lole32 -o ScreenShots/PictureStr.pyd

返回这个:

    C:\Python27\libs/libpython27.a: error adding symbols: File format not recognized
    collect2.exe: error: ld returned 1 exit status

(删除 -ld3d9 -lole32 不会改变任何东西)

我不知道为什么会发生这种情况(并且在我尝试过的任何其他计算机或我的旧计算机上都不会发生)并且我找不到任何可能导致这种情况的原因。

如果这是相关的,我会使用 windows 10 64bit(在我的旧电脑和新电脑上)。

也许我需要重新编译 python 库或那个特定文件,所以任何关于如何做到这一点的建议也非常感谢。

感谢您阅读本文,欢迎任何建议。

我找到了解决办法,我在下面回答。

【问题讨论】:

    标签: python c++ gcc


    【解决方案1】:

    我尝试将旧计算机上的 libpython27.a 处理到新计算机上,然后再次尝试使用 gcc,它成功了,看来新的 64 位 python 2.7 安装 libpython27.a 已损坏。如果其他人遇到此问题,请尝试重新创建您的 libpython27.a 文件。

    重新创建 libpython.a 运行:

    pexports "C:\Windows\SysWOW64\python27.dll" > "C:\Python27\libs\python27.def"
    dlltool --dllname "C:\Windows\SysWOW64\python27.dll" --def "C:\Python27\libs\python27.def" --output-lib "C:\Python27\libs\libpython27.a"
    

    C:\Python27\ 是您的 python 文件夹,如果是 32 位计算机,则应该是 System32 而不是 SysWOW64。

    要安装 pexports,请安装 mingw 并运行 mingw-get install pexports。

    【讨论】:

    • 这最终对我有用,但请确保您的 g++ 和 dlltool 来自相同的工具链。即“which g++”和“which dlltool”应该在同一个目录中。
    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 2013-11-23
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多