我有一个目录maths
,它是一个仅由头文件组成的库。
我试图通过在我的主目录中运行以下命令来编译我的程序:
g++ -I ../maths prog1.cpp prog2.cpp test.cpp -o et -lboost_date_time -lgsl -lgslcblas
但是我收到以下编译错误:
prog1.cpp:4:23: fatal error: maths/Dense: No such file or directory
compilation terminated.
prog2.cpp:6:23: fatal error: maths/Dense: No such file or directory
compilation terminated.
maths
与.cpp文件位于同一目录(即我的主目录)中,我也在家中运行编译行。
prog1.cpp和prog2.cpp具有以下标头
分别在第4行和第6行#include<maths/Dense>
,因此我收到错误。
我该如何解决它。
答案 0 :(得分:2)
您可以将包含路径更改为-I..
,也可以将包含更改为#include <Dense>
等等,如果maths
与您的源文件位于同一目录中并且是您当前的目录,则可以将包含路径更改为-I.
或将包含更改为#include "Dense"
< / p>
答案 1 :(得分:1)
maths与.cpp文件
位于同一目录(即我的主目录)中
您的包含路径为-I ../maths
。您需要-I ./maths
- 或更简单,-I maths
,因为maths
是当前目录的子目录,而不是父目录。正确?
然后在您的C ++文件中,使用#include <Dense>
。如果要使用#include <maths/Dense>
,则需要调整包含路径。但是,使用-I.
可能会导致大量问题 1 ,我强烈建议反对。
相反,通常的做法是包含一个include
子目录。因此,您的文件夹结构最好如下所示:
./
+ include/
| + maths/
| + Dense
|
+ your_file.cpp
然后使用-I include
,并在您的C ++文件中#include <maths/Dense>
。
1)如果你有一个文件./map.cpp
从中生成一个名为./map
的可执行文件,请考虑会发生什么。只要您在代码中的任何位置使用#include <map>
,就会尝试包含./map
而不是map
标准标题。