簡體   English   中英

g++ - Python.h:沒有這樣的文件或目錄

[英]g++ - Python.h: No such file or directory

我正在嘗試制作一個 C++ 腳本來運行一些簡單的 Python 代碼:

// t.cpp
#include <Python.h>

int main(int argc, char* argv[])
{
    Py_Initialize();
    PyRun_SimpleString("print('TEST PASSED')");
    Py_Finalize();

    return 0;
}

運行g++ t.cpp ,出現錯誤:

t.cpp:1:20: 致命錯誤: Python.h: 沒有那個文件或目錄

編譯終止

我發現了許多類似的問題,都是針對 IDE 或其他開發軟件的,或者通過安裝python3-dev解決的。 python3-dev已經安裝,我什至嘗試在編譯時手動包含頭文件:

g++ t.cpp -I ~/.virtualenvs/MainEnv/include/python3.5m/Python.h
g++ t.cpp -I /usr/include/python3.5m/Python.h

兩者都不改變任何東西。

我該如何解決這個錯誤?

更新:我發現使用g++ t.cpp -I /usr/include/python3.5/似乎包含標題,但隨后它遇到了更多錯誤:

t.cpp:(.text+0x10): 未定義的對 `Py_Initialize' 的引用

t.cpp:(.text+0x1f): 對`PyRun_SimpleStringFlags' 的未定義引用

t.cpp:(.text+0x24): 未定義的對 `Py_Finalize' 的引用

collect2: 錯誤: ld 返回 1 個退出狀態

在我的 github 上設置了一個類似的例子

g++ t.cpp缺少一些東西:

  • 告訴 g++ cpython 的頭文件在哪里(通過-I/path/to/headers/
  • 告訴 g++鏈接到 libpython(通過-lpython3.5m

您還可以使用pkg-config檢索這些標志

$ pkg-config python-3.5 --libs --cflags
-I/usr/include/python3.5m -I/usr/include/x86_64-linux-gnu/python3.5m -lpython3.5m

你的命令行應該看起來像g++ -I/usr/include/python3.5m t.cpp -lpython3.5m

#include <...>用於編譯器附帶的包含。
對任何其他包含使用#include "Python.h"

運行以下命令來編譯您的代碼:

mytest.cpp :

#include <Python.h>

int main(int argc, char* argv[])
{
    Py_Initialize();
    PyRun_SimpleString("print('TEST PASSED')");
    Py_Finalize();
    
    return 0;
}

編譯

$ g++ mytest.cpp `pkg-config python3-embed --libs --cflags` -o mytest
$ ./mytest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM