0

g++ を使用して他のライブラリにリンクするときに、深刻な問題がいくつかあります。多くの場合、非常にイライラし、作業を開始する前に停止します。

例: 私は、boost.asio を使用して、チュートリアルを試していました。ドキュメントで、boost_system と regex にリンクする必要があることがわかりましたが、何らかの理由で、それを機能させるために pthread も追加する必要がありました...「apt-get install」でブーストをインストールしました。へのリンクはブーストされました。明らかに間違っている...

Linuxでの開発方法が本当に理解できないようです。ライブラリを追加する必要がある場合、どうすればわかりますか? 私が示した例では、boost は pthread に依存しているため、リンクする必要があります。ブーストが依存する他のものにリンクする必要がないのはなぜですか? または、pthread が何かに依存しているとします。それをリンクする必要がないのはなぜですか (たとえば、標準の C ライブラリにリンクする必要がないのはなぜですか)。g++ がどのように構成されているかをどのように知ることができますか? そして、どうすればそれを変えることができますか?

私の主な質問は次のとおりだと思います:Linuxでビルドを構成するロジックはありますか? (参考文献も大歓迎です)

欲求不満の最後のポイント: プログラミングは、実際にそれを行うよりもはるかに楽しく、はるかに簡単であるように常に思えます...

4

1 に答える 1

3

これはパッケージングのバグによるものです。ライブラリ A がライブラリ B に依存している場合、その A は B に対してリンクする必要があります。アプリケーションは A に対してのみリンクする必要があります。

一部のディストリビューションのライブラリのパッケージャーが間違っていることがあります。それについてあなたができることは何もありません。たとえば、Gentoo Linux で boost_system に対してリンクする場合、boost_system はそれ自体で pthread に対してリンクするため、pthread に対してリンクする必要はありません。

$ ldd /usr/lib/libboost_system.so | grep pthread
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcf677f8000)
于 2013-07-26T20:11:23.877 に答える