Python嵌入式C代码编译错误

3

我最近买了一台新电脑,试图将一个Python项目从旧电脑转移到新电脑。这个Python项目使用了一些DirectX9 C++代码(包括#include <Python.h>)来截屏,而我使用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 64位操作系统(旧计算机和新计算机均如此)。

也许我需要重新编译Python库或特定文件,因此对于如何执行此操作的任何建议也将不胜感激。

谢谢您阅读此文,欢迎提出任何建议。

我已经找到了解决方案,在下面发表了答案。

1个回答

6

我尝试将旧电脑上的libpython27.a复制到新电脑上并再次使用gcc,结果成功了,看来新的64位Python 2.7安装中的libpython27.a是有问题的。如果其他人也遇到了这个问题,请尝试重新创建你的libpython27.a文件。

要重新创建libpython27.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"

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

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


最终这对我有用,但请确保你的 g++ 和 dlltool 来自同一个工具链。即 'which g++' 和 'which dlltool' 应该在同一个目录中。 - driedler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接