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\Python\Python35\include 而你应该传递的东西是:-L"C:\Users**** *\Local\Programs\Python\Python35\Lib(include 通常是头文件的文件夹,而 lib 是库的文件夹)以上是关于Python.h 编译错误:collect2.exe Id 返回 1 退出状态的主要内容,如果未能解决你的问题,请参考以下文章
python能够执行,但编译第三包遇到 python.h no such file or directory