2017-02-13 16 views
1

私は、新しいプロジェクトで静的または動的なC++ライブラリをコンパイルするためにいくつかの研究を行っています。 (私はthis answerも読んでいます)。私は、OpenBSDとFreeBSD上で、システムライブラリがLinux(1.5 MB)よりもはるかに大きい(5-7 MB)ことを見ました。ですから、2つの質問があります:libstdC++システムライブラリはOpenBSDとFreeBSDで削除されていません

  1. OpenBSD libestdC++。soはlibstdC++と違いますか?so?私はそれについての情報を見つけなかった、Googleはちょうど私を修正し、単語から "e"手紙を削除します。
  2. なぜこれらのライブラリはBSDで非常に大きいのですか?私がそれらを展開したり静的にリンクしたいのであれば、彼らは巨大になるでしょう。このための回避策はありますか?

ありがとうございます。

+0

あなたが話しているのはどのバージョンのFreeBSDですか?なぜなら、FreeBSD 10は代わりにLLVM 'libC++'を使うように思えるからです。 – Nazar554

+0

私はFreeBSD 10.3を使用していますが、gccはlibC++ではなくstdlibC++を使用しているようです。私はシンプルなC++ 14バイナリを作成しました。これらはその依存関係です: libstdC++。so.6 => /usr/local/lib/gcc49/libstdc++.so.6(0x800820000) libm.so.5 =>/lib/libm .so.5(0x800b33000) libgcc_s.so.1 => /lib/libgcc_s.so.1(0x800d5c000)libc.so.7 => /lib/libc.so.7(0x800f6a000) – Taw

答えて

0

OpenBSDでは、libstdc++は、ベースのC++ライブラリ(GCC 4.2)、libestdc++はポート(GCC 4.9または6)からインストールされています。ライブラリはOpenBSD上にシンボルとともにインストールされています。シンボルはstrip -s libwhatever.soで取り除くことができます。

+0

ありがとうございます。私はシンボルを取り除くことができることを見ましたが、私の懸念は、私がこれをやろうとすれば、私が "壊す"(私たちのビルドマシンは多くのチームによって使用される)かどうかでした。または、おそらく私はlibestdC++の複製を作成し、それを取り除き、私のバイナリを剥奪されたものとリンクさせることができますか? – Taw

+0

あなたはlibの依存関係を壊さないでしょう。ただし、パッケージツールは異なるチェックサムのために不平を言うでしょう。私の提案は、仮想マシンを使って静的にlibを取り除いてリンクし、それらを本番環境に移動することです。 –

関連する問題