2

私はLinux とターミナルに非常に不慣れですが、学ぼうとしています。また、これまで外部ライブラリを含めたこともありません。ここで、G++ を使用して Ubuntu で開発されているプログラムに Boost.Asio ライブラリを含める必要があります。

誰かが最初からこれを行う方法を非常に親切かつ非常に注意深く説明できますか?

編集:

元の質問を拡張します。このコードを他の人に送信して、完全に別のマシンで同じ環境で実行する必要がある場合、それをどのように考慮に入れればよいですか? このプロセス全体で文字通りライブラリ ファイルをコードと同じフォルダーに配置する必要がある場合、.cpp と共にそれらのライブラリ ファイルをこの他の人に送信するだけでよいでしょうか?

4

3 に答える 3

1

あなたはUbuntuを使用していると述べたので、ブーストを使用する最も簡単な方法は、最初にlibboost-all-dev(シナプスから)パッケージをインストールすることです。これにより、コンパイルが必要なものを含め、すべてがインストールされます。g++その後、通常の方法で使用するだけです。

バージョンが希望どおりかどうかに注意してください。そうでない場合は、自分でインストールすることをお勧めします。一方、ブーストはほとんどヘッダーのみのライブラリであるため、ファイルをフォルダーに抽出し (Ubuntu では右クリック...)、コンパイル中にフォルダーにリンクするだけで済みます。

g++ hello_world.cpp -I boost_1_49_0/boost

最後のパスは、コンパイラがブースト ヘッダーを見つけるためのパスを指定します (絶対パスを使用してください)。

あなたのプログラムを他の人に送りたい場合は、一部のブースト ファイルだけをコピーしないでください。依存関係のために機能しません。簡単ですが、あなたと同じ環境をインストールするように依頼してください (ファイルを解凍するだけです...)。

于 2012-04-10T01:04:29.503 に答える
0

特定のIDEについて、またはBoost.Asioについて具体的にはわかりませんが、一般的には次のようになります。

ライブラリにリンクする必要があるときはいつでも、に似た名前のファイルがlib???.aあります。これは必要です。ファイルにリンクするには、-l???フラグをに渡す必要があります。g++

(私自身は詳細にあまり詳しくないので、他のファイル形式などもあるかもしれません...)


編集について:

-l???「正しい」方法は、ライブラリを自分でダウンロードして、リンカーに渡すだけです。ソースコードにBoostを含めると、それは巨大になりますが、正当な理由はありません...結局のところ、コードにSTLを含めるのとは異なります。

于 2012-04-10T00:46:58.143 に答える
0

ライブラリを含めませんが、代わりに依存関係を宣言します。例えば。autoconfautomakeを使用することを検討してから、boostを要求し、ASIO ライブラリを要求するために1を追加します。ファイルでは、マクロを使用し、./configure に依存してそれらを適切に設定します。次に、コードを使用する人は誰でも、ブーストの場所について環境を分析し、ビルド環境で適切な値を設定して、成功するようにする既知のスクリプトを実行する必要があります。AX_BOOST_BASEAX_BOOST_ASIOMakefile.amBOOST_CPPFLAGSBOOST_LDFLAGS./configuremake

少なくともこれは理論です。実際には、全体がautohellとしてよく知られているのには理由があります。CMakeや boost 独自のbjamなどの代替手段が存在します。ただし、概要は常に同じです。ビルド構成で依存関係を宣言し、製品を消費する宛先の場所が要件を満たす必要があります (つまり、必要なバージョンのブーストをダウンロード/インストールする必要があります)。それ以外の場合、バイナリを配布するビジネスに参入すると、アプリケーションが展開されると予想されるプラットフォーム/アーキテクチャ/ディストリビューションが豊富であるため、問題が発生します。

明らかに、ANTなどの別のビルド システムを使用する場合は、ブーストの要件を宣言する方法について、そのビルド システムのドキュメントを参照する必要があります。

1: ax_boost.m4m4 ライブラリを検出する唯一のブーストではありません。他にもありますが、マクロの GNU autoconf リストに記載されているものです。

于 2012-04-10T01:16:24.453 に答える