C++ 链接到 python 3.2 x64 应用程序无法加载
Posted
技术标签:
【中文标题】C++ 链接到 python 3.2 x64 应用程序无法加载【英文标题】:C++ linking to python 3.2 x64 application unable to load 【发布时间】:2011-03-09 11:48:39 【问题描述】:这是我猜几个部分的问题。
我正在阅读有关嵌入 python 解释器的文档。我已经很好地编译和链接了所有东西,只有当我运行它时应用程序崩溃(具体来说它无法加载,所以它甚至还没有开始运行)。
我正在运行 Windows 7 Professional 64 位。我正在用 msys 编译最新的 mingw 夜间版本(它与安装程序一起打包,所以我相信那里没有兼容性不匹配)。使用默认存储库 python 3.1 和 build-essential 工具,相同的代码在 Ubuntu 10.10 上编译良好。
到目前为止,在我的研究中,我认为这个“可能”是链接 32 位应用程序(据我所知,mingw 使用 32 位)与 64 位库(python dll)之间的问题。
我可以发布完整的代码,但是由于这往往是一个链接/运行问题,我只包含了 makefile 开始。从下面的 makefile 中,我已将 Python3.dll 从 C:\Python32\DLLs 复制到我的项目目录中。另外值得注意的是,我必须创建自己的 .def 然后从 DLL 创建 .a 才能链接(否则找不到符号)。这可能是我的问题的根源吗?
在运行 a.exe(从命令行和资源管理器)时,我会收到一个标准警报窗口:
应用程序错误:应用程序无法正确启动 (0xc000007b)。单击“确定”关闭应用程序。
如果我错了,请纠正我,但这表明我的可执行文件在某种程度上已损坏。
我已经测试了我的编译器/链接器,以确保它不是编译器/链接器问题。它包括并且当应用程序不使用 python 时,这不会在编译、链接或运行时引发任何错误。
感谢您对此事的任何帮助或说明。这让我真的很难过。 个人电脑
生成文件
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)
【问题讨论】:
【参考方案1】:如果 python3.dll 肯定是 64 位的,而您的应用程序肯定是 32 位的,那么这将不起作用。您不能从 32 位应用程序链接到 64 位 dll。指针将无法工作between the two models。
【讨论】:
我认为发生的事情是 python 是 64 位的 - 但没有指定它是。因此,我必须从源代码编译它,或者将我的工具集更新为 64 位(mingw-w64?)是时候进行更多的刺激了。 这很麻烦。只需使用 32 位版本的 Python。 我同意。只是我不知道它是 64 位 python。我将不得不重新安装/新安装到不同的 x86 目录。【参考方案2】:您不能在同一进程中混合使用 32 位和 64 位图像。结尾。的。故事。
【讨论】:
以上是关于C++ 链接到 python 3.2 x64 应用程序无法加载的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Vista x64 的 C# 应用程序中加载 C++ DLL
如何在 Windows 64 位机器上将 c++ 应用程序编译成 x64 模式?