私はこの小さなプログラムをコンパイルしようとしています:
#include <boost/math/distributions/poisson.hpp>
namespace boost { namespace math {
template <class RealType = double,
class Policy = policies::policy<> >
class poisson_distribution;
typedef poisson_distribution<> poisson;
template <class RealType, class Policy>
class poisson_distribution
{
public:
typedef RealType value_type;
typedef Policy policy_type;
poisson_distribution(RealType mean = 1); // Constructor.
RealType mean()const; // Accessor.
}
}} // namespaces boost::math
このコードは here から取得されます。
コンパイラーから、boost/math/distributions/poisson.hpp
が見つからないと通知されました。そこで、私は自分でこのファイルを見つけようとします(locate poisson.hpp
コマンドを使用)。次のファイルが見つかりました:/opt/software/boost/1.45_ubuntu12.4lts_gcc4.5.3/include/boost/math/distributions/poisson.hpp
。したがって、私のコードでは、コンパイラーが確実にファイルを見つけられるように、ファイルの完全な名前を入れています。
#include </opt/software/boost/1.45_ubuntu12.4lts_gcc4.5.3/include/boost/math/distributions/poisson.hpp>
しかし、もう1つのエラーメッセージが表示されます。boost/math/distributions/fwd.hpp
が見つかりません。
コンパイラに正しいディレクトリ内のファイルを検索させる方法はありますか?
g++
コンパイラを使用しています。
G ++コマンドにインクルードパスが必要です。
g++ -I/opt/software/boost/1.45_ubuntu12.4lts_gcc4.5.3/include/ [rest of command here]
(およびおそらくライブラリパスへのリンク)。
一般に、ソースコードにフルパスを配置するのはではないのが得策です。その種の移植性の概念は完全に破壊されます:)(つまり、そのコードは自分のPC以外のPCでコンパイルできなくなり、さらにそれ半年後に疑わしいことになるでしょう)。
とにかく、上記のような長いコンパイラ行を入力していることに気付いた場合は、実際に makefile を使用するときです。
あなたはおそらく この質問 も興味深いと思うでしょう。
(これは質問への直接の回答ではありませんが、@uoɥʇʎPʎzɐɹCがここで見たい最終的な完全な回答で対処する必要があると考える考慮事項のリストです。)
C++でサードパーティの依存関係を処理するという問題は単純なものではありません。これには多くのアプローチがあり、適切なアプローチの選択は、ツールセットと環境、プロジェクト管理、および取るべきトレードオフに依存します。
Boostの場合、それは主にヘッダーのみのライブラリであることを覚えておく必要がありますが、一部のコンポーネントには個別にコンパイルされた部分も含まれます(静的または動的libにすることができ、コンポーネントまたは特定のユースケースのみに必須にすることができます) 。例えば。 Boost.Filesystemはコンパイルが必要で、Boost.GraphはGraphVizファイルを解析する場合にのみ必要で、Boost.Variantはそれをまったく必要としません(「ヘッダーのみ」のライブラリです)。詳細については、 http://www.boost.org/doc/libs/release/more/getting_started/unix-variants.html#header-only-libraries を参照してください(これにより、最新バージョンにリダイレクトされます。現在は1.61です)。
Boostのヘッダーのみの部分のみを使用すると、考慮事項の多くが簡略化されますが、もちろん他の部分も必要になる場合があります。
考慮すべき事柄:
インクルードファイルを検索するディレクトリを指定するには:
-I /opt/software/boost/1.45_ubuntu12.4lts_gcc4.5.3/include
ライブラリを検索するディレクトリを指定するには:
-L /opt/software/boost/1.45_ubuntu12.4lts_gcc4.5.3/lib
実際のライブラリ名を指定するには:
-l foo
ライブラリがlib foo。aと呼ばれるとき
-I
、-L
、または-l
の後にスペースを書く必要はありません。今のところ、読みやすくなっています。
ヒント:
Makefileを使用します。多分あなたはブーストインクルードパッチをすでにいくつかの環境変数にエクスポートしています。