web-dev-qa-db-ja.com

C / C ++開発用のUbuntuLinuxでのライブラリとヘッダーファイルのインストール

いくつかのCまたはC++コードの依存関係を満たさなければならないたびに、完全に失われたと感じていることを認めなければなりません。現在、私は buntu 9.1 (Karmic Koala)を使用していますが、Windowsからの同じような寂しさを覚えています。

私はC、C++、静的および動的ライブラリ、ヘッダーファイルとリンク、およびパケットマネージャーの「適性」を理解していると本当に思いますが、実際の部分に関しては、どうすればよいかまったくわかりません。どうにかして管理しても、どうやってそこにたどり着いたのかわからず、何も学ばない。

たとえば、今日は "glib2、curl、opensslを使用する"というコードを使用したいと思いました。結局、curlopensslはすでにインストールされていることがわかりましたが、パケットマネージャーを介してlibcurl3-devをインストールする必要がありました。これには、libcurl4-openssl-devも必要(およびインストール)されるため、 OpenSSLについて心配する必要はありません。しかし、私は67の似たような選択肢からこれらのパケット名を選択する必要がありました。一方、glibは、一致するパケットがまったくなかったため、手動でダウンロードしてビルドする必要がありました。

これを見つけるのに数時間かかりましたが、これは初めてではありません。だから私の質問は本当にです:

依存関係について漠然とした説明がある場合:

  • それらのどれがすでにインストールされているかを知るにはどうすればよいですか?
  • パッケージをインストールすることで、どれを実現できるかをどのように判断できますか?
  • これらのパッケージの正確な名前を知るにはどうすればよいですか?
  • パッケージをソースからビルドする必要がある場合、このソースの無限の依存関係とそれらの依存関係の依存関係で迷子にならないようにするにはどうすればよいですか?
  • ライブラリをオブジェクトファイルにリンクする必要もあると思います。 1つのパケットに複数の静的ライブラリファイルが含まれている場合、どれをリンクするかを(試行錯誤せずに)どのように知ることができますか?
7
Lena Schimmel

依存関係を満たすためにインストールするパッケージを把握することは、正確な科学ではありません。しかし、あなたを助けるかもしれないいくつかのヒントがあります:

  • 何かをコンパイルするために満足のいく依存関係で作業しているときは、ほとんどの場合、-devで終わるパッケージが必要です。これは開発の略です。たとえば、opensslパッケージには、暗号化を操作するためのコマンドラインツールとライブラリが含まれています。 libssl-devには、openssl開発用のヘッダーファイルとライブラリが含まれています。
  • Aptを使用してキーワードでパッケージを検索するには、apt-cache searchを使用します。たとえば、libssl-devがopenssldevパッケージの名前であることを実際には知りませんでした。次のコマンドを使用することがわかりました:apt-cache search openssl | grep dev次に、別の言語/ライブラリに関連していないように見えるコマンドを使用します。
  • dpkg -lを使用してインストールしたパッケージを確認できますが、通常は、必要なパッケージを見つけてaptにインストールするように指示します。既にインストールしている場合は、aptが通知します。もう1つの良いヒントは、どのパッケージがファイルを所有しているかを知りたい場合は、dpkg -S /path/to/thefileを使用することです。
  • ソースからパッケージをビルドする必要が生じた場合、依存関係ツリーを解決する簡単な方法はありません。 ./configureは、またはREADMEファイル。多くの場合、必要な正確なパッケージに名前を付けることさえあります。
  • リンクするものを理解するために、通常、それはパッケージの名前またはあなたが望むものの最も一般的な名前に関連しています。 libsslの例では、-lsslをgccに渡すだけです。 -lのオプションがわからない場合は、/ lib /を調べてください(前面の「lib」と背面の「.so ...」を削除して、「 gccに渡されるmiddle ')。
3
SoapBox

誰も言及しなかった

aptitude build-dep

マニュアルページのエントリはかなり包括的です。

2
malte