我正在嘗試編譯一個Python.h用于執行一些 python 腳本的 C 程式。在添加 python 之前,我有一個完美運行的 makefile。我添加了運行 python 腳本的代碼,其中包括包含Python.h檔案。
我編輯了 makefile 以包含此檔案,但沒有成功。
我的生成檔案:
CC = g
SHELL = /bin/sh
EXECUTABLES = Software_V2
CFLAGS = -O2 -g0 -Wall -pedantic -Wstrict-prototypes -std=c99 $(shell python3-config --cflags)
LIBS = -lm -lrt -laes_access -lstdc -pthread
OBJS = $(EXECUTABLES).o
.PHONEY: all
all: $(EXECUTABLES)
.PHONEY: clean
clean:
rm -f *.[bo]
rm -f *.err
rm -f $(EXECUTABLES)
$(EXECUTABLES): $(OBJS)
$(CC) $(OBJS) $(CFLAGS) $(LIBS) -o $@
我已經安裝了以下庫:
sudo apt-get install python-devsudo apt-get install python3-devsudo apt install libpython3.7-dev
運行后的錯誤make我收到以下錯誤:
g -c -o Software_V2.o Software_V2.cpp
Software_V2.cpp:3:10: fatal error: Python.h: No such file or directory
#include <Python.h>
^~~~~~~~~~
compilation terminated.
make: *** [<builtin>: Software_V2.o] Error 1
我也嘗試將包含從更改#include <Python.h>為#include <python3.7m/Python.h>
我的嘗試都沒有成功,我現在沒有靈感去嘗試一些新的東西,也許你們知道如何解決我的問題。謝謝!
uj5u.com熱心網友回復:
您正在混合 C 和 C 。這些是完全不同的語言:您不應該混淆它們。
在 makefile 中,默認規則用于CC保存 C 編譯器和CXXC 編譯器。類似地,它們用于CFLAGS保存 C 編譯器的CXXFLAGS標志和 C 編譯器的標志。
在您的 makefile 中,您沒有設定CXX或CXXFLAGS變數,但您正在嘗試使用默認規則來構建您的目標檔案。為默認值CXX就是g (你的系統)和默認值CXXFLAGS是空的。這就是為什么當 make 向您顯示編譯命令時,您的任何選項都沒有出現在那里:
g -c -o Software_V2.o Software_V2.cpp
如果您正在嘗試編譯 C 代碼(暗示您的檔案擴展名.cpp不是.c),那么您應該設定CXXFLAGSnot CFLAGS。
此外,-std=c99如果您嘗試編譯 C ,則設定是錯誤的;該標志設定了 C 1999 標準,而不是 C 。
uj5u.com熱心網友回復:
嘗試include "Python.h"- 當您使用 <> 時,預編譯器會在一組不同的目錄中查找。
還要python3-config --cflags在命令列上運行并確保它為您提供正確的包含目錄 - Python.h 檔案應該在其中之一中。
最終,問題是在預編譯器檢查的標準目錄中找不到該檔案,也沒有在您指定的目錄中(使用 -I 選項)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/350327.html
