CentOSと小さなブーストの例

CentOSと小さなブーストの例

私はこれがブースト自体よりも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

関連情報