C++项目引入Python.h后使用Makefile编译找不到头文件问题求助
问题原因
你遇到的编译错误核心是Makefile使用了错误的编译选项变量:C++代码的隐式编译规则不会读取CFLAGS变量,导致你添加的Python头文件路径没有被实际传入编译参数,因此找不到Python.h。
解决方案
按以下步骤修改Makefile即可解决问题:
- 修正编译变量:C代码编译默认读取
CXXFLAGS而非CFLAGS,同时移除仅适用于C语言的-Wstrict-prototypes、-std=c99选项,替换为C对应标准 - 补充Python链接参数:链接阶段需要引入Python动态库,在LIBS中添加
python3-config --libs的输出 - 修正小笔误:原Makefile中的
.PHONEY是拼写错误,正确写法为.PHONY
修改后的完整Makefile如下:
CXX = g++ SHELL = /bin/sh EXECUTABLES = Software_V2 CXXFLAGS += -O2 -g0 -Wall -pedantic -std=c++17 $(shell python3-config --cflags) LIBS = -lm -lrt -laes_access -pthread $(shell python3-config --libs) OBJS = $(EXECUTABLES).o .PHONY: all all: $(EXECUTABLES) .PHONY: clean clean: rm -f *.[bo] rm -f *.err rm -f $(EXECUTABLES) $(EXECUTABLES): $(OBJS) $(CXX) $(OBJS) $(CXXFLAGS) $(LIBS) -o $@
验证步骤
- 先执行
make clean清理旧的编译缓存 - 可选验证:执行
python3-config --cflags确认输出中包含正确的头文件路径,比如-I/usr/include/python3.7m,如果系统有多个Python版本,可以将python3-config替换为对应版本的python3.7-config确保路径匹配 - 重新执行
make编译即可,不需要修改代码里#include <Python.h>的写法
内容的提问来源于stack exchange,提问作者Jordy
相关产品推荐
相关产品推荐

