2012-04-25 13 views
0

私はヘッダファイルのみからなるライブラリである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にはそれぞれ次のヘッダーがあります。 #include<maths/Dense>の4行目と6行目にエラーが発生しています。

どうすれば修正できますか?

+0

Dense.hまたはDense.hppではないと確信していますか? –

+0

@chris、それはそれを解決した...ありがとう! – user1155299

答えて

1

maths is located in the same directory(i.e. my home directory) as the .cpp files

に含まれています。 -I ./maths - またはより簡単な、-I mathsmathsは、現在のディレクトリのサブディレクトリであり、親ディレクトリではないためです。右?

次に、C++ファイルで#include <Dense>を使用します。 #include <maths/Dense>を使用する場合は、インクルードパスを変更する必要があります。しかし、-I.を使用すると、大きな問題が発生する可能性があります、私は強く助言に対してこれを助言します。

代わりに、includeサブディレクトリを含むことが一般的です。そして、-I includeを使用

./ 
+ include/ 
| + maths/ 
| + Dense 
| 
+ your_file.cpp 

を、そしてあなたのC++ファイル、#include <maths/Dense>中:だからあなたのフォルダ構造は、好ましくは、以下のようになります。


1)

はあなたが./mapと呼ばれる実行可能ファイルを生成し、そこからファイル./map.cppを持っているとどうなるか考えてみましょう。コード内の任意の場所に#include <map>を使用すると、map標準ヘッダーの代わりに./mapが含まれます。

+0

この例の説明に感謝します。それは助ける。 – user1155299

2

あなたはmathsは、ソースファイルと同じディレクトリにあり、それはあなたの現在のディレクトリである場合、あなたはあなたのインクルードパスを変更するか、あなたの-I..へのパスを含めるか、またはあなたの#include <Dense>

待ちに含まを変更することができますいずれか-I.またはあなたがあなたのパスが-I ../mathsとして与えられているが含ま#include "Dense"

関連する問題