You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下C++嵌入Python报错/usr/bin/ld: cannot find -lpython3.7求Makefile修改

问题与解决方案

问题背景

在Ubuntu 18.04.6 LTS系统中,将Python 3.7.3手动安装到/home/zain/Desktop/MobileNet_basic/practice/Python目录,编写C++代码嵌入Python解释器时,编译出现链接错误:

/usr/bin/ld: cannot find -lpython3.7

Makefile修改建议

核心问题分析

原Makefile存在3个关键错误:

  • 库路径LIB指向错误,并非Include/Lib,而是Python安装目录下的lib文件夹
  • 库文件名错误,Ubuntu手动编译的Python库默认带m后缀(对应libpython3.7m.so)
  • 编译器选择错误,C代码应使用g++而非gcc,否则会缺失C标准库链接支持

修改后的Makefile(手动指定路径版本)

# Makefile
PYTHON_DIR = /home/zain/Desktop/MobileNet_basic/practice/Python

# 用g++编译C++代码
CXX = g++

EXE = main
SRC = main.cpp
OBJ = $(SRC:.cpp=.o)

# 包含Python的头文件目录
CFLAGS = -std=c++11 -I$(PYTHON_DIR)/Include -I$(PYTHON_DIR)
# 链接Python库(注意带m后缀),指定正确的库路径
LDFLAGS = -lm -L$(PYTHON_DIR)/lib -lpython3.7m

DEPS=$(SRC:%.cpp=%.d)

all: $(EXE)

$(EXE): $(OBJ)
	$(CXX) $(OBJ) $(CFLAGS) $(LDFLAGS) -o $@

%.o: %.cpp
	$(CXX) $(CFLAGS) -MMD -MP $< -o $@

clean:
	rm -rf *.o *.d $(EXE)

-include $(DEPS)

更可靠的版本(用python-config自动生成参数)

如果不想手动维护路径和库名,可以直接调用Python自带的python3.7-config工具获取编译链接参数,避免手动出错:

# Makefile
PYTHON_CONFIG = /home/zain/Desktop/MobileNet_basic/practice/Python/bin/python3.7-config

CXX = g++

EXE = main
SRC = main.cpp
OBJ = $(SRC:.cpp=.o)

# 用python-config获取编译参数
CFLAGS = -std=c++11 $(shell $(PYTHON_CONFIG) --cflags)
# 用python-config获取链接参数
LDFLAGS = $(shell $(PYTHON_CONFIG) --ldflags)

DEPS=$(SRC:%.cpp=%.d)

all: $(EXE)

$(EXE): $(OBJ)
	$(CXX) $(OBJ) $(CFLAGS) $(LDFLAGS) -o $@

%.o: %.cpp
	$(CXX) $(CFLAGS) -MMD -MP $< -o $@

clean:
	rm -rf *.o *.d $(EXE)

-include $(DEPS)

额外说明

  • 确保Python安装目录下的lib文件夹中存在libpython3.7m.so(或对应软链接)
  • 使用python-config版本时,要确保指定的是自己安装的Python的python3.7-config路径,而非系统默认版本

内容的提问来源于stack exchange,提问作者zain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:09:32