如何用G++测试依赖HDF5的tarray.cpp?编译找不到hdf5.h求助
解决G++编译tarray.cpp时找不到hdf5.h的问题
问题根源
你遇到的这个错误,核心原因是G对尖括号包含的头文件(<hdf5.h>)的搜索规则:默认情况下,G只会去系统标准头文件目录(比如/usr/include)查找,不会自动扫描当前工作目录。哪怕你把HDF5的头文件放到了和tarray.cpp同一文件夹,尖括号的包含方式也会让G++直接忽略这个位置。
具体解决方法
方法1:用-I参数指定头文件搜索目录
这是最直接且通用的方案,不需要修改任何代码。在编译命令里加上-I.(.代表当前目录),告诉G++把当前目录加入头文件搜索路径:
g++ -I. tarray.cpp -o tarray
如果你的HDF5头文件是放在当前目录的某个子文件夹里(比如./hdf5_include/),只需要把.换成对应的路径即可:
g++ -I./hdf5_include tarray.cpp -o tarray
方法2:修改头文件包含语法(谨慎使用)
如果你的代码里(或者H5Include.h里)的#include <hdf5.h>可以改成#include "hdf5.h",G++就会优先搜索当前目录的头文件。不过这个方法有局限性:如果HDF5的其他头文件也用了尖括号包含,你可能需要修改大量代码,不太推荐。
额外提醒:编译通过后的链接问题
等你解决了头文件的问题,大概率会遇到链接错误(找不到HDF5的库文件)。如果你的HDF5库文件也放在当前目录,记得在编译命令里加上库路径和库名:
g++ -I. -L. -lhdf5 -lhdf5_cpp tarray.cpp -o tarray
-L.:指定库文件的搜索目录为当前目录-lhdf5:链接HDF5的C库-lhdf5_cpp:链接HDF5的C++库(因为你用了H5Cpp.h,所以需要这个)
内容的提问来源于stack exchange,提问作者Luis Enriquez-Contreras
相关产品推荐
相关产品推荐

