私はこれがブースト自体よりもLinuxに関連していると思うので、ここでこの質問をすることです。
だから小さなcppファイルを作成しました。
#include <boost/math/special_functions/round.hpp>
#include <iostream>
int main(int argc, char **argv)
{
std::cout << "Start rounding ..." << std::endl;
double b = boost::math::round(1.5);
std::cout << "Rounding of 1.5: " << b << std::endl;
return 0;
}
これでコンパイルを開始します。
g++ main.cpp
すべてが動作し、a.out
ファイルを取得しました。コマンドを入力すると、次の結果ldd a.out
が表示されます。
linux-vdso.so.1 => (0x00007ffdfdf38000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f6183d77000)
libm.so.6 => /lib64/libm.so.6 (0x00007f6183a74000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f618385e000)
libc.so.6 => /lib64/libc.so.6 (0x00007f618349d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f61840a7000)
ここに質問があります。
コンパイル時にエラーが発生しないのはなぜですか?私はコンパイラ/リンカが次のように話すと仮定します。Hey, there is a function declared (in the boost hpp file), but not defined.
ラウンド関数の定義がブーストライブラリの1つで定義されているとします。私の考えでは-lboost_math_c99l
。
答え1
まあ、(Mac OS Xでは)失敗しました。 CentOSがそのファイルをどこからインポートできるかを見てみましょう。
# yum whatprovides '*/round.hpp'
...
boost-devel
この出力のどこかにいくつかのアーキテクチャのレトロな参照が必要です。したがって、システムには、boost-devel
コンパイラが見つけることができる必須ヘッダーを含むパッケージがインストールされていると仮定します(ビルド環境が損なわれない限り)。パッケージ名がわかったら、次の詳細を確認できます。
# rpm -ql boost-devel | grep ns/round.hpp
/usr/include/boost/math/special_functions/round.hpp