C++链接到Python 3.2 x64应用程序无法加载
我想这可能是个多部分的问题。
我正在研究如何嵌入Python解释器的文档。现在一切编译和链接都很顺利,但当我运行应用程序时,它却崩溃了(具体来说,它无法加载,甚至还没开始运行)。
我在使用的是64位的Windows 7专业版。我用的是最新的mingw夜间版本进行编译,并且使用的是随安装包一起提供的msys(所以我认为没有兼容性问题)。同样的代码在Ubuntu 10.10上使用默认的Python 3.1和build-essential工具编译得很好。
到目前为止,我的研究让我相信,这“可能”是因为将一个32位的应用程序(因为我知道mingw是32位的)与一个64位的库(Python的dll)链接时出现了问题。
我可以把代码全部发上来,但因为这通常是链接或运行的问题,所以我先只附上了makefile。在下面的makefile中,我已经把C:\Python32\DLLs中的Python3.dll复制到了我的项目目录里。另外值得一提的是,我不得不从这个DLL创建自己的.def文件和.a文件,以便进行链接(否则会找不到符号)。这可能是我遇到问题的原因吗?
在运行a.exe(无论是通过命令行还是资源管理器)时,我收到一个标准的警告窗口,上面写着:
应用程序错误:应用程序无法正确启动(0xc000007b)。点击确定关闭应用程序。
如果我错了请纠正我,但这表明我的可执行文件在某种程度上是损坏的。
我已经测试过我的编译器和链接器,以确保这不是编译器或链接器的问题。它包括,并且在应用程序不使用Python时,编译、链接或运行都没有抛出任何错误。
感谢您提供的任何帮助或见解。这让我真的很困惑。
pcnerd
Makefile
FILE= main.cpp
LIBS= -lpython3
LIBPATH= -L/c/python32/libs
INCLUDEPATH = -I/c/python32/include
CPP=g++
FLAGS = -g
build:
$(CPP) $(FLAGS) $(FILE) $(LIBS) $(LIBPATH) $(INCLUDEPATH)
2 个回答
你不能在同一个程序里混用32位和64位的图片。就这样,没别的了。
如果你的python3.dll是64位的,而你的应用程序是32位的,那就没办法一起使用了。32位的应用程序不能链接64位的dll文件。因为在这两种不同的系统架构之间,指针是无法正常工作的。你可以想象成两种不同的语言,它们之间无法直接交流。