5

Linux Standard Base http://www.linuxfoundation.org/collaborate/workgroups/lsbから LSB C++ Compiler を使用してプログラムをビルドしたいと考えています。プログラムは、gcc 4.4 バージョンでビルドされた Boost ライブラリに依存します。コンパイルが失敗します。LSB C++ Compiler で Boost ライブラリをビルドすることはできますか? あるいは、Boost ライブラリを古い gcc バージョンでビルドすることは可能ですか?どのバージョンが推奨されますか? 私の最終的な目標は、ほとんどの Linux ディストリビューションで、私の実行可能ファイルとサードパーティの Boost ライブラリを実行することです。

一般的に、Linux ディストリビューションのバイナリ互換性を向上させ、Boost ライブラリに依存する C++ クローズド ソース アプリケーションを開発するにはどうすればよいでしょうか?

4

2 に答える 2

6

私は最近、これを行うように電話をかけました。他の人に役立つ場合は、次の手順に従います。

  • LSB SDK をダウンロードしてインストールする
  • ブーストと抽出のバージョンを /opt/boost/boost_<version> にダウンロードします (私は 1.43 を使用しました)
  • libbz2-dev がインストールされていることを確認してください。
  • ブートストラップ
cd /opt/boost/boost_<version>
./bootstrap.sh --prefix=/opt/boost --without-libraries=python,mpi --without-icu
  • 行を編集/opt/boost/boost_<version>/project-config.jamして追加する
using gcc : : /opt/lsb/bin/lsbc++ : <cflags>-U_GNU_SOURCE <cxxflags>-U_GNU_SOURCE ;

ファイルの先頭付近。bjam がその構成を読み取る他のファイルの 1 つに using 宣言がある場合、これは失敗することに注意してください。どのファイルを読み取っているかを知るために渡すことができ--debug-configurationます。

  • 走る
./bjam cflags=-fPIC cxxflags=-fPIC linkflags=-fPIC install

私は、python または MPI ライブラリーを動作させようとはしませんでしたし、ICU を boost.regex ライブラリーで動作させようともしませんでした。後者はおそらく、LSB ツールセットを使用して ICU ライブラリの静的バージョンを構築する場合です。

-fPIC32 ビット Linux では必ずしも必要ではありませんが、静的ライブラリを 64 ビット Linux の共有ライブラリにリンクする場合は必須です。

/opt/boost/lib最終結果は のバイナリと のヘッダーになるはず/opt/boost/includeです。明らかに、自分の好みに合わせてプレフィックスを変更できます。すべてのコードを LSB に移植する前に、まだやらなければならない作業がかなりあるので、認定プロセスがどの程度進んでいるかについてはまだ報告できません。

于 2010-07-23T11:00:02.787 に答える
3

LSBC++コンパイラは実際にはコンパイラではありません。lsbc++実行可能ファイルは、システムにインストールされているGCCコンパイラのラッパーです(実際のコンパイラはオプションで制御でき--lsb-cxxます)。ほとんどの場合、ブーストビルドシステムをハックして、ネイティブgccコンパイラの代わりにLSBラッパーを呼び出します。

したがって、発生する可能性のある問題は、LSBコンパイラが言語構造をコンパイルできないことではなく、リンクの問題がいくつかあることである可能性があります。

たとえば、LSBコンパイラは、LSBに属していない限り、デフォルトでコードがリンクされている共有ライブラリを破棄します。BOOSTがそのようなライブラリに依存している場合、これによりリンクエラーが発生する可能性があります。これは環境変数を介して制御できますがLSBCC_SHAREDLIBS、これらのライブラリを製品と一緒に出荷する必要があります。

もう1つの問題は、LSBがGCCコンパイラのリリースに遅れをとっているということです(そして、BOOSTはコンパイラのすべての暗い隅に這う可能性があります)。私の知る限り、GCC 4.4は十分にテストされていないため、4.3コンパイラで試してみることをお勧めします。

そして、グーグルはLSBCCでブーストを構築することに関連するものを何も見つけていないようです、それであなたがそれをなんとかすることができたら、例えばあなたの質問に対するあなた自身の答えとしてあなたの経験を共有してください。

于 2010-04-26T08:12:54.720 に答える