dynamic-linking

プログラムのopenatによって開かれたパスを変更するには、LD_PRELOADを使用します。
dynamic-linking

プログラムのopenatによって開かれたパスを変更するには、LD_PRELOADを使用します。

プログラムが実際にファイルシステムで開くいくつかのパスにパスを変更したいと思います。その理由は、プログラムを並列に実行したいのですが、そのプログラムはそれを一時ディレクトリ/tmp/somedir/として使用し、並列インスタンスで競合が発生するためです。 私はトリックを実行する素晴らしい答えを見つけました。プロセスの特定のパスを偽造することは可能ですか?。残念ながら、これはcat広告には機能しますが、私のプログラムには機能しません。その理由は、プログラムがC ++ APIを使用しているためだと思います。 再現するために、最初にファイルにいくつかのコンテンツを...

Admin

Linux soルール:.soリンクは開発パッケージから出ていますか?
dynamic-linking

Linux soルール:.soリンクは開発パッケージから出ていますか?

私のUbuntu jammy Linux PCにapt-get install libuv1libuv1パッケージ()をインストールした後、次の名前のファイルと次のlibuv.so.1.0.0名前のシンボリックリンクがあることを確認しましたlibuv.so.1。 $ find /usr -name "libuv.so*" 2>/dev/null /usr/lib/x86_64-linux-gnu/libuv.so.1.0.0 /usr/lib/x86_64-linux-gnu/libuv.so.1 $ ls -l /usr/lib/x86_64-lin...

Admin

共有ライブラリの変更
dynamic-linking

共有ライブラリの変更

共有ライブラリを使用するCプログラムがあるとします。 共有ライブラリを変更して再構築すると、そのライブラリを使用するすべてのプログラムは、次回実行されると自動的にその変更を受け取ります。静的ライブラリーの場合、変更はプログラムが新しいバージョンのライブラリーに再コンパイルされた後にのみ表示されます。 一部の共有ライブラリ関数のコードを変更したり(メソッドシグネチャを変更せずに)、新しい関数を追加するなど、関数のアドレスが変更されます。 共有ライブラリを使用するプログラムは、再コンパイルや再リンクなしでどのようにこれらの機能を再検索できますか?住所が変更された...

Admin

AIXのランタイム・ライブラリー検索順序
dynamic-linking

AIXのランタイム・ライブラリー検索順序

私が正しく理解した場合、変数LIBPATHsumはLD_LIBRARY_PATHリンカのパラメータよりも優先順位が高くなります-blibpath。コンパイル中に指定されたパス(つまり-blibpath別のパス)に沿ってライブラリを検索するようにローダーに指示する方法を探しています。たとえば、Linuxには-rpath変数よりも優先順位が高いものがあります。 AIXでエミュレーションを探しています。 また、AIXでライブラリーを見つけるパスの優先順位を明確に説明できる場所を探しています。 ...

Admin

gdbus シンボル検索エラー
dynamic-linking

gdbus シンボル検索エラー

私はアーチLinuxを使用しています。最近の更新後、gdbusが機能せず、シンボル検索エラーが発生することがわかりました。 ➜ tidedra@ZgrArch ~ gdbus gdbus: symbol lookup error: /usr/lib/libgobject-2.0.so.0: undefined symbol: g_string_free_and_steal それからライブラリバージョンの問題ではないかと思い、関連ファイルのリンクライブラリを確認してみました。 ➜ tidedra@ZgrArch ~ ldd /usr/bin/gdbu...

Admin

chrootで最新のbashを使用するには、LD_LIBRARY_PATHをハッキングしてください。
dynamic-linking

chrootで最新のbashを使用するには、LD_LIBRARY_PATHをハッキングしてください。

bashfromの最新バージョンを入手しようとしていますLinuxMint。 私の箱に一つありますchroot。Debian Sid bash当初ラッパースクリプトでやろうとしていたことPATH #!/bin/bash LD_LIBRARY_PATH=/path/to/chroot/usr/lib/x86_64-linux-gnu:/path/to/chroot/lib:/path/to/chroot/lib64:/path/to/chroot/var/lib:/path/to/chroot/usr/lib:/path/to/chroot/usr/loca...

Admin

".so"ライブラリへの接続順序を提供する
dynamic-linking

".so"ライブラリへの接続順序を提供する

.soRで複数の共有ライブラリに動的にリンクする必要があります。 Rは、dyn.load共有オブジェクトのファイルパスを取得するこの関数を使用して、一度にこれを実行できます。ただし、まだロードしていない他の共有ライブラリに依存している共有ライブラリをロードすると、接続は失敗します。 したがって、正しい順序でリンクできるように、共有ライブラリリストの依存関係のトポロジ順序を取得する必要があります。私は実現するできるこの情報は各共有ライブラリで実行され、結果を解析して抽出されますがldd、単純なロード順序を提供するために共有ライブラリのリストを取得し、トポロジで...

Admin

AppImageツールは、含める.soファイルをどのように決定しますか?他のディストリビューションで異なる.soファイルインクルードリストが生成されるのはなぜですか?
dynamic-linking

AppImageツールは、含める.soファイルをどのように決定しますか?他のディストリビューションで異なる.soファイルインクルードリストが生成されるのはなぜですか?

2つの異なるLinuxディストリビューションでQtプロジェクトをコンパイルして作成しました.AppImage(Qtはさまざまな方法でインストールされました)。 両方の出力には.AppImage異なる.soファイルが含まれています。どちらも.AppImage実行されます。 私は知りたいです: AppImageツールは、含めるライブラリをどのように決定しますか? .AppImage2つのファイルに異なるライブラリが含まれていて、両方が実行されるのはなぜですか? どちらか(または両方)が100%機能しませんか? さまざまなLinuxディストリビューションと互換...

Admin

システムコール機能は実行ファイルにどのようにリンクされますか?
dynamic-linking

システムコール機能は実行ファイルにどのようにリンクされますか?

単一のシステムコールで特徴付けられる無意味なプログラムを書いているとしましょうopen。 #include <fcntl.h> void main() { int hi = open("does not exist", 0); } プログラムをコンパイルしてldd出力に対してコマンドを実行すると、次の結果が表示されます。 linux-vdso.so.1 (0x00007ffddd741000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6835328000) /...

Admin

_initと_startの違いは何ですか?
dynamic-linking

_initと_startの違いは何ですか?

DT_INIT 動的項目が初期化関数で _init を指していても、_start が最初に実行されます。 誰かがDT_INITの目的を説明できますか? _start シンボルが常にエントリポイントなので、何の効果もないようです。 ...

Admin

ロードされた共有ライブラリの場所を見つける
dynamic-linking

ロードされた共有ライブラリの場所を見つける

私はOracleクライアントライブラリを使用するCプログラムを管理しています。ほとんどの場合、これらのライブラリはORACLE_HOME環境変数が設定されることを期待しており、環境変数なしでは機能しません。 putenv(3)私たちの場合、変数の値は常に共有ライブラリ自体の場所で発生し、Cコードで設定(を使用して)を実装しようとしています。 ただし、これを行うには、プログラムが使用する特定の共有ライブラリがどこにロードされているかを知る必要があります。したがって、ldd実行可能ファイルに適用すると、出力は次のようになります。 libc.so.7 => ...

Admin

aptパッケージ - 静的ライブラリと動的ライブラリ
dynamic-linking

aptパッケージ - 静的ライブラリと動的ライブラリ

Ubuntu 18.04を使用してください。私はaptを使ってライブラリをインストールします。たとえば、次のようになります。 sudo apt install freeglut3-dev aptは常に動的ライブラリをインストールしますか、パッケージに静的または動的ライブラリが含まれているかどうかを確認できますか? ...

Admin

「LD_LIBRARY_PATH エクスポート」が設定されていても、共有ライブラリが見つかりません。
dynamic-linking

「LD_LIBRARY_PATH エクスポート」が設定されていても、共有ライブラリが見つかりません。

ここに奇妙な問題があります。いくつかのライブラリを必要とするQTアプリケーションがあります。通常、次のbashスクリプトが機能します。 #!/bin/bash export LD_LIBRARY_PATH="./libs" export QT_DEBUG_PLUGINS=1 ./dataUI "$@" #This is the name of the APP マイコンピュータ(Ubuntu 18)と他のデバイス(QT IDEが装備されていない)でWSLと連携します。しかし、誰かがスクリプトを実行すると、「./libs」フォルダにあるライブラリファイルが見...

Admin

既存の.soファイルが存在してもロードできない現象、DockerホストOSに依存するようです。
dynamic-linking

既存の.soファイルが存在してもロードできない現象、DockerホストOSに依存するようです。

Alma8ベースのDockerコンテナにQt6を構築し、DockerホストはFedora 35です。 場合によっては(下記)、すべてのQtライブラリはロードされませんlibQt6Core.so[.6[.2.4]]。ただし、ファイルが存在し、正しいディレクトリから検索されます。libQt6Dbus.soたとえば、別のQtライブラリを見つけてロードします。 幅広いデバッグ、再構築、ウェブ検索では、根本的な原因が何であるか、どのように解決できるかについての手がかりを得ることができませんでした。 ポジショニングの問題 問題の範囲を次のシナリオに絞り込んだ。 私は2...

Admin

libfooのバージョン名があるがlibfoo.soがない場合 -lfooとリンクする方法
dynamic-linking

libfooのバージョン名があるがlibfoo.soがない場合 -lfooとリンクする方法

libfooが含まれているとします/usr/lib/x86_64-linux-gnu/。 libfoo.so.2-> libfoo.so.2.0.0(シンボリックリンク) libfoo.so.2.0.0 特に抜けたのはlibfoo.so。 /usr/local/bin/sillyprogこのようなものを使うプログラムがあるとしましょうgcc somefile.c -lfoo。それを使用しようとするたびにそれがないのでsillyprog失敗します。/usr/bin/ld: cannot find -lfoolibfoo.so その中にあるファイルを編...

Admin