Python.h 编译错误:collect2.exe Id 返回 1 退出状态

Posted

技术标签:

【中文标题】Python.h 编译错误:collect2.exe Id 返回 1 退出状态【英文标题】:Python.h compiling error: collect2.exe Id returned 1 exit status 【发布时间】:2016-06-21 13:15:19 【问题描述】:

所以,我在网上搜索了所有内容,但找不到任何东西。

我是从 python 开始的,我做了一个 TKinter 应用程序。起初,我尝试将其编译为 .exe 文件,但没有成功。所以现在我将 python 嵌入到 C++ 中。每次我尝试编译它(使用 Dev-C++),我都会得到错误:

C:\Users\*****\AppData\Local\Temp\ccsqSJ5V.o    [program-name].cpp:(.text+0x10): undefined reference to `__imp_Py_Initialize'
C:\Users\*****\AppData\Local\Temp\ccsqSJ5V.o    [program-name].cpp:(.text+0x25): undefined reference to `__imp_PyRun_SimpleStringFlags'
C:\Users\*****\AppData\Local\Temp\ccsqSJ5V.o    [program-name].cpp:(.text+0x2e): undefined reference to `__imp_Py_Finalize'
F:\Documents\Videos\[program-name]\program\collect2.exe [Error] ld returned 1 exit status

F:代表闪存驱动器。 在 Dev-c++ 选项中,我添加了:

-Wall -I\C:\Users\*****\AppData\Local\Programs\Python\Python35\include

这是完整的命令:

g++.exe "F:\Documents\Videos\[program-name]\program\[program-name].cpp" -o "F:\Documents\Videos\[program-name]\program\[program-name].exe" -Wall -I\C:\Users\*****\AppData\Local\Programs\Python\Python35\include -I"C:\Programma's\Dev-C++\MinGW64\include" -I"C:\Programma's\Dev-C++\MinGW64\x86_64-w64-mingw32\include" -I"C:\Programma's\Dev-C++\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include" -I"C:\Programma's\Dev-C++\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++" -I"C:\Users\*****\AppData\Local\Programs\Python\Python35\include" -L"C:\Programma's\Dev-C++\MinGW64\lib" -L"C:\Programma's\Dev-C++\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc

我的问题是:我该如何处理?

请注意:我没有管理员权限,我只是一个标准用户。


Python 版本:3.5.1 Dev-C++ 版本:5.11 GCC 版本:我不知道,但如果需要我会找到它:)

编辑:由于 NathanOliver 的重复标记,我会这样问:我必须添加哪些命令行变量来编译它?

【问题讨论】:

重复的问题,虽然对于任何缺少的符号更通用,但不会帮助互联网上的人们,不精通 C/C++,试图用“dev c++”构建 Python 扩展 - 一个,使用正确的命令行参数指向正确的 Python 库的简短回答将是一个比“关闭为重复”更有用的互联网资源。 @jsbueno 过去,我用 C 编写了一些程序,但由于我不理解而停止了。但是,同意。 Dev-C++ 只是我正在使用的 C/C++ 编辑器。它只是具有内置编译器功能,使用 GCC。 【参考方案1】:

链接器抱怨因为它找不到一组关于某些 python 东西的引用,事实上我在 g++ 调用中没有看到任何 python 库。

你需要有类似 -lpython3.5.1 的东西来告诉 g++ 链接到 python 库(假设你的系统中安装了 python,否则你必须使用 -L 选项添加到库的路径)。

更多关于 g++ makefile 和链接的资源: https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html

【讨论】:

我已经在本地安装了python,但是-lpython3.5.1返回No such file or directory。我试过了:-L"C:\Users\*****\Local\Programs\Python\Python35-l"C:\Users\*****\Local\Programs\Python\Python35-L"C:\Users\*****\Local\Programs\Python\Python35\include-l"C:\Users\*****\Local\Programs\Python\Python35\include 以及以上所有内容都没有引号。都没有用。 这很简单:-L 选项必须指向库路径,-I(它是 i)指向标头路径。然后添加库名称 -lLibraryName。你是怎么安装python的?我将从在您的系统中找到库开始。您在开始时显示的错误是链接器告诉您您忘记告诉他有关 python 库的信息。 “No such file or directory”表示你告诉他的路径不对。 我通过离线安装程序在%appdata%\Programs\Python\Python35中安装了Python。 您应该在 Python 文件夹中有一个名为 Lib 的文件夹。您必须将 python 库的路径传递给 -L。你传递给 -L 这个:-L"C:\Users*****\Local\Programs\Pyt‌​hon\Python35\include 而你应该传递的东西是:-L"C:\Users**** *\Local\Programs\Pyt‌​hon\Python35\Lib(include 通常是头文件的文件夹,而 lib 是库的文件夹)

以上是关于Python.h 编译错误:collect2.exe Id 返回 1 退出状态的主要内容,如果未能解决你的问题,请参考以下文章

尝试编译C扩展模块时缺少Python.h

g++ 与 python.h,如何编译

使用 Python.h 未定义符号进行 C++ 编译

python能够执行,但编译第三包遇到 python.h no such file or directory

Ubuntu,致命错误:Python.h:没有这样的文件或目录#include <Python.h>

致命错误:Python.h:没有这样的文件或目录