問題タブ [ldd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 動的ライブラリがアプリケーションに対してリンクされている理由を判断する方法は?
ソースからビルドしている Linux アプリがあります。バイナリに対して ldd を実行すると、ほとんどのライブラリは理解できますが、すべてではありません。
ld または gcc/g++ にフラグを追加する方法、またはリンカーが特定のライブラリに対してリンクすることを選択した理由を判断するためにできることはありますか?
編集:
@shloim が設定したルートを探索するために、次のことを試しました。
nm
libcrypto で動作しない明らかな理由はありますか?
qt - QPluginLoader: カスタム プラグイン (依存関係あり) が Qt にロードできない
QPluginLoader を使用して、Qt プラグイン フレームワークを使用して QT アプリケーションを構築しています。
プラグインをビルドしましたが、フレームワークがプラグインをロードできません。私のプラグインは、サードパーティの shlib (log4qt) に依存しています。
ファイルは正しく識別されますが、ファイルのロードは失敗します (これにより、すぐに依存関係の欠落が疑われました)。
shlib で ldd を実行すると、出力では、これが唯一の不足しているファイルです。
liblog4qt.so.1 => 見つかりません
問題を解決するために次のことを試しました。
- QApplication::addtLibraryPath("liblog4qt へのパス。*) の使用
- /etc/ld.conf を編集して、ライブラリの場所と更新されたキャッシュを手動で追加しました
- すべての liblog4qt* ファイルをプラグイン ディレクトリにコピーしました
上記のすべては、チョコレートの消防士と同じくらい役に立ちました.
これがプラグインをロードする方法です。ここには何も珍しいことはありません...
(関連部分の)コンソール出力は次のとおりです。
私のプラグインライブラリがロードされていない理由を誰か知っていますか?
[[追加情報]]
- OS: Ubuntu 12.0.4 LTS
- gcc: 4.6.3
- QT: 4.8.1
- QTクリエーター: 2.4.1
gcc - gcc はリンクをビルドしますが、ldd で共有ライブラリが表示されません
作成しなければならないプログラムがあります。プログラムは に依存しlibA
、 にlibA
依存しlibB
ます。両方のライブラリは同じフォルダーにありますが、ldd libA.so
含まれていないlibB.so
ため、リンク中に追加する必要があります。
これは私のgcc
コマンドです:
gcc -L/path/to/libraries/lib -lA -lB -I/path/to/libraries/include main.cpp
プログラムはビルドおよびリンクされますが、起動しません。次のエラーが表示されます。
./a.out: シンボル検索エラー: /path/to/libraries/lib/libA.so: 未定義のシンボル: symbol_used_in_libA_but_defined_in_libB
私のバイナリに含まれていないことldd
がわかります:libB.so
私はこれらの条件を持っています:
/path/to/libraries
内側にありますLD_LIBRARY_PATH
- 実行
ldconfig
は問題ありldconfig -p
ません。両方libA.so
を見つけて、libB.so
- gccコマンドで変更
-lB
するとリンカーエラーが発生するため、実行可能ファイル内でリンクしていなくても正しく検索-lBB
されると思います。gcc
libB.so
私が間違っていることは何ですか?実行可能ファイルを両方のライブラリにリンクするにはどうすればよいですか?
linux - ldd 出力の理解 - シンボリック リンク
通常、共有ライブラリには 2 つのシンボリック リンクがあります。
私のプログラムに、2 つのシンボリック リンクもある共有ライブラリをリンクします。
実行すると、次のようldd myprogram
になります。
どういう意味ですか ?ldd が 2 番目のシンボリック リンクを表示するのはなぜですか? 実行すると、ライブラリがロードされたことを示すgrep assimp /proc/myprogrampid/maps
へのパスがlibassimp.so.3.1.1
表示されますが、ldd 出力の形式がわかりません。
c - gcc リンカーは予期しない so を生成します (clang は問題ありません)
プログラムは clang では適切にリンクされていますが、gcc ではリンクされていません。
GCC では異なる結果が得られます (もちろん、共有ライブラリが壊れます)。
- gcc バージョン 4.9.1 (Ubuntu 4.9.1-16ubuntu6)
- Ubuntu clang バージョン 3.5.0-4ubuntu2 (tags/RELEASE_350/final) (LLVM 3.5.0 ベース)
リンカー オプションは同じです。ここで何が起こっているのですか?
完全なソースはこちらです。
x86 - 共有ライブラリを探すときに「ldd」が「見つかりません」と報告する
「engine.so」と「cengine.so」という 2 つの共有ライブラリがあります。「cengine.so」には「engine.so」への依存関係があり、「ldd」コマンドで確認できます。
http://puu.sh/gj0ZU/f4530c3c28.jpg
ただし、両方が同じディレクトリにあるにもかかわらず、ライブラリが見つからなかったと述べています! 検索ディレクトリを何らかの方法で手動で指定する必要がありますか?
さらに、「ld-linux-x86-x64.so.2」への依存関係があります。プログラムを 32 ビット アプリケーション (-m64 パラメーターなし) としてビルドしましたが、なぜ自動的に 64 ビット (だと思いますか?) ライブラリにリンクするのですか?
bash - リンクされたすべてのライブラリで md5sum を取得する
プログラムが突然起動しなくなり、エラーも何も発生しないという問題があります。コードとそのリンクされたライブラリの整合性を確保するために、(動的に) リンクされたすべてのライブラリの md5sum を比較したいと考えました。このフォーラムの他の投稿から、リンクされたすべてのライブラリを簡単にリストして、それらをうまく表示できることがわかりました。
ファイル名の横にチェックサムを含む列を追加するように、md5sum または sha1sum を追加するにはどうすればよいですか? md5sum を追加するだけでは、1行しか生成されず、仕事をしていないようです:
収量
md5sum を除外すると、リンクされたライブラリの適切なリストが生成されます。
どんなヒントでも大歓迎です!