如何让cppyy正确找到项目中的额外依赖头文件?
问题原因
报错的核心是头文件搜索路径和头文件内的引用规则不匹配,要么是添加的相对路径解析错误,要么是搜索路径和引用写法不对应:header1.h中使用#include "foo/bar/header2.h"引入同目录文件,编译器要找到这个文件,必须存在某个已配置的头文件搜索目录,该目录下直接存在foo/bar/header2.h这个子路径。
解决方法
方法1:用绝对路径配置搜索目录(推荐,不受运行目录影响)
该方法不需要修改原有项目的头文件代码,只需要调整python侧的配置:
import os import cppyy # 清空cppyy历史加载缓存,避免旧的错误记录干扰 cppyy.clear() # 计算当前脚本所在的项目根目录绝对路径,假设脚本和include文件夹同级 project_root = os.path.abspath(os.path.dirname(__file__)) # 将include文件夹的绝对路径加入搜索列表 cppyy.add_include_path(os.path.join(project_root, 'include')) # 正常引入头文件即可 cppyy.include('foo/bar/header1.h')
如果你不想用绝对路径,也可以每次运行python脚本时,先cd到include文件夹所在的父目录再执行脚本,相对路径就能正确解析。
方法2:修改头文件引用写法(符合C/C++项目通用规范)
因为header1.h和header2.h在同一个目录下,直接把header1.h中的引用改为同目录相对路径即可:
// 将原来的 #include "foo/bar/header2.h" 改为下面的写法 #include "header2.h"
修改后不需要调整python侧的路径配置,直接运行原有代码即可生效。
内容的提问来源于stack exchange,提问作者DLAN
相关产品推荐
相关产品推荐

