As I Please

MTのいんすとーるの練習と、その他びぼうろく・・・

タグ「libstdc++」が付けられているもの


cmake on FreeBSD9

やっぱり いまどき gccだけじゃなく、clang, llvm あたりを入れておきたいということで、sourceをもってきてみたら、ほぼほぼ cmakeを要求される。
昔に入れたcmakeは ver3.5.2 で古すぎる。
最新のもの(3.18.0)を持ってきて bootstrapをかけると dup3,accept4,pipe2 あたりが必要で、これは FreeBSD10以降じゃないと入っていない。
ということで FreeBSD9で使えるcmakeを探してみると、、、1つ前の 3.17.3で FreeBSDのバージョンを見て、dup3,pipe2とかを利用したりしなかったり。3.18.0だと問答無用に使っている。ということで、まずは
dup3とかが入っていない /usr/lib/libc.so (/lib/libc.so7へのシンボリックリンク)を利用してcmake(3.17.3)を作成する。
sourceを持ってきて、

CC=/usr/local/bin/gcc ./bootstrap
でコンパイルしてみると、

/usr/lib/libstdc++.so.6: version GLIBCXX_3.4.14 required by /usr/local/src/cmake-3.17.3/Bootstrap.cmk/cmake not found

次は


CC=/usr/local/bin/gcc CPP="-std=c++17" LD_LIBRARY_PATH=/usr/local/lib CXX="/usr/local/bin/g++"

で行ったが、

/usr/local/src/cmake-3.17.3/Source/cmFileCommand.cxx: メンバ関数 ‘bool \xe7\x84\xa1\xe5\x90\x8d}::cURLProgressHelper::UpdatePercentage(double, double, std::__cxx11::string&)’ 内:
/usr/local/src/cmake-3.17.3/Source/cmFileCommand.cxx:1445:38: エラー: ‘lround’ is not a member of ‘std’
this->CurrentPercentage = std::lround(value / total * 100.0);

で失敗する。 std::lround が無いバージョンを探すと、https://gitlab.kitware.com/cmake/cmake/-/blob/v3.13.4/Source/cmFileCommand.cxx のようで、3.13.4 を持ってきてやり直してみる。
CC="/usr/local/bin/gcc" CXX="/usr/local/bin/g++" ./bootstrap
CC="/usr/local/bin/gcc" CXX="/usr/local/bin/g++" gmake
CC="/usr/local/bin/gcc" CXX="/usr/local/bin/g++" gmake test
CC="/usr/local/bin/gcc" CXX="/usr/local/bin/g++" gmake install
test でいくらか失敗するけど、まぁそのくらいなら、、、で入れてしまう。 /usr/lib/libstdc++.so.6 が、、、と言われるので、バックアップとって/usr/local/lib/にsymlink をはってしまう。

cmake on FreeBSD9

やっぱり いまどき gccだけじゃなく、clang, llvm あたりを入れておきたいということで、sourceをもってきてみたら、ほぼほぼ cmakeを要求される。
昔に入れたcmakeは ver3.5.2 で古すぎる。
最新のもの(3.18.0)を持ってきて bootstrapをかけると dup3,accept4,pipe2 あたりが必要で、これは FreeBSD10以降じゃないと入っていない。
ということで FreeBSD9で使えるcmakeを探してみると、、、1つ前の 3.17.3で FreeBSDのバージョンを見て、dup3,pipe2とかを利用したりしなかったり。3.18.0だと問答無用に使っている。ということで、まずは
dup3とかが入っていない /usr/lib/libc.so (/lib/libc.so7へのシンボリックリンク)を利用してcmake(3.17.3)を作成する。
sourceを持ってきて、

CC=/usr/local/bin/gcc ./bootstrap
でコンパイルしてみると、

/usr/lib/libstdc++.so.6: version GLIBCXX_3.4.14 required by /usr/local/src/cmake-3.17.3/Bootstrap.cmk/cmake not found

次は


CC=/usr/local/bin/gcc CPP="-std=c++17" LD_LIBRARY_PATH=/usr/local/lib CXX="/usr/local/bin/g++"

で行ったが、

/usr/local/src/cmake-3.17.3/Source/cmFileCommand.cxx: メンバ関数 ‘bool \xe7\x84\xa1\xe5\x90\x8d}::cURLProgressHelper::UpdatePercentage(double, double, std::__cxx11::string&)’ 内:
/usr/local/src/cmake-3.17.3/Source/cmFileCommand.cxx:1445:38: エラー: ‘lround’ is not a member of ‘std’
this->CurrentPercentage = std::lround(value / total * 100.0);

で失敗する。 std::lround が無いバージョンを探すと、https://gitlab.kitware.com/cmake/cmake/-/blob/v3.13.4/Source/cmFileCommand.cxx のようで、3.13.4 を持ってきてやり直してみる。
CC="/usr/local/bin/gcc" CXX="/usr/local/bin/g++" ./bootstrap
CC="/usr/local/bin/gcc" CXX="/usr/local/bin/g++" gmake
CC="/usr/local/bin/gcc" CXX="/usr/local/bin/g++" gmake test
CC="/usr/local/bin/gcc" CXX="/usr/local/bin/g++" gmake install
test でいくらか失敗するけど、まぁそのくらいなら、、、で入れてしまう。 /usr/lib/libstdc++.so.6 が、、、と言われるので、バックアップとって/usr/local/lib/にsymlink をはってしまう。