問題タブ [dynamic-linking]
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.
c++ - 無効な動的ライブラリを探しているアプリ
代替テキスト http://img63.imageshack.us/img63/5726/screenshot20100125at124.png
開発中のアプリで._libpal_bullet.dllを要求するエラー ウィンドウが何度も表示されますが、実際にはlibpal_bullet.dllである必要があります。奇妙なことに、すべてのエラー メッセージが表示された後でも、同じディレクトリに存在する正しい dll を使用してアプリが実行されます。
これらのエラーを取り除くにはどうすればよいですか?
qt - OS X と Linux に QT アプリをデプロイする
QT アプリを展開する最良の方法は何ですか? trolltech でホストされているドキュメントを読みましたが、静的ライブラリまたは動的ライブラリとリンクして、ユーザーにフレームワークをインストールしてもらう方が良いですか? シンプルな GUI フロントエンドを実行するためだけに、私のアプリを使用する人が 160 MB のフレームワークをダウンロードする必要はありません。
c - (動的)リンクを行うために必要な最小限の情報?
これは私が繰り返し遭遇する質問であり、通常はプラグインに関するものですが、最近、ビルドシステムの問題を解決しようとして遭遇しました。私の懸念は主に*nixベースのシステムですが、Windowsにも当てはまると思います。
問題は、ダイナミックリンクを実行するために必要な最小限の情報はどれくらいかということです。DebianのようなLinuxディストリビューションには単に「i686」があり、これで十分です。ただし、ここには暗黙の情報があると思います。共有オブジェクトを使用してコンパイルされている限り、共有オブジェクトの動的リンクを実行することはおそらくできません-march=i686
ね。
では、共有オブジェクトを正常にロードできるようにするには、何を正しく一致させる必要がありますか?C ++の場合、名前のマングリングのためにコンパイラー(場合によってはバージョン)も一致する必要があることは知っていますが、cの場合はそうではないことを望んでいました。
どんな考えでもありがたいです。
編集:
ニールの答えは、私がダイナミックリンクについて実際に話しているのではないことに気づきました。むしろ、質問は2つあります。
- 静的リンクに必要なもの、および
- ダイナミックリンクに必要なもの
私が最初に推測することに対して、私はより高い希望を持っています。
gdb - QT4 GDB デバッガーが Ubuntu の共有ライブラリにリンクしない
私は UNIX と QT4 を初めて使用しますが、ubuntu が登場します。私の最初の QT4 プロジェクトでは、単純なテスト アプリを、移植されたコードの共有 dll にリンクします。QT Creator を使用してアプリケーションをビルドし、ターミナルから実行することができます。ただし、組み込み GDB デバッガーは次のように報告します。共有をロードできません...そのようなファイルまたはディレクトリはありません。
.pro ファイルには、行 LIBS += /home/aurel/VISUALAGEPORTS/libVISUALAGEPORTS.so.1.0.0 が含まれています。
実行されるバックアップ バージョンに戻すことができました。ただし、復元されたバージョンを初めてデバッグしようとしたときに、同じエラーが発生しました。2 回目の試みは不思議なことに変更なしで機能しました。
QT Creator が正しくリンクし、埋め込みデバッガーではなくターミナルから実行される実行可能ファイルを生成する理由を知っている人はいますか?
アイデアをありがとう
c++ - Linux の共有ライブラリのシンボル バインドはどのように機能しますか?
g++ -O0 で cpp プログラムをコンパイルすると、バイナリに空の文字列 (basic_string) のシンボルが含まれていないことに気付きました: _S_empty_rep_storage この同じプログラムを -O2 でコンパイルすると、前述のシンボルが実際にバイナリ内に含まれていることに気付きました。次のように (ビンで nm を使用):
00000000006029a0 V _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4
私のアプリケーションはいくつかの .so (動的ライブラリ) を使用しており、アプリケーションがロードされると、これらの .so ファイルのいくつかが次のようにバインドされていることに気付きました (私は LD_DEBUG=all を設定してプログラムを実行しました):
しかし、私の .so の 1 つが次のようにのみバインドされていることにも気付きました。
ただし、上記の mydynamiclib.so のようにバイナリ (mytestapplication) にバインドすることはありません。
それで、これが実際に何を意味するのか疑問に思いましたか?これは、anotherdynamiclib.so が上記の空の文字列に対して、アプリケーションの残りの部分とは異なるシンボルを使用することを意味しますか? 私が本当に求めているのは、上記の例のコンテキストでシンボルバインディングがどのように機能するかということだと思います.
ありがとう!
c++ - 共有ライブラリ内の未定義の参照についてGCCに通知するように強制します
別の(サードパーティの)共有ライブラリにリンクされている共有ライブラリがあります。次に、アプリケーションでdlopenを使用して共有ライブラリをロードします。これはすべて正常に機能します(ファイルが適切なパスにあると仮定します)。
問題は、ライブラリをリンクするときに、サードパーティの共有ライブラリに対してリンクするように指定する必要がないことです。GCCは、未定義の参照に関するエラーを報告せずにそれを受け入れます。だから、質問。未定義の参照についてGCCに通知させるにはどうすればよいですか?
ライブラリを(一時的に)実行可能ファイルに変更すると、未定義の参照が取得されます(ライブラリをリンカに提供していない場合)。(指定すれば問題なく動作します。)
つまり、次のことが行われます。
2行目がエラーを出さず、3行目が未定義の参照について不平を言っている場合。
サンプルコード:
ああ:
a.cpp:
bh:
b.cpp:
c++ - 見つからない .DLL ファイルに関連する例外をキャッチできますか?
.LIB および .DLL ファイルを含むサードパーティ コンポーネントがあります。コンポーネントを使用するために、.LIB を C++ プログラムにリンクし、.DLL をアプリケーションと共に配布します。提供される機能は非常に具体的で、私のユーザーの小さなサブセットにのみ関連していますが、.DLL を配布するにはライセンス料が発生します。
ここでの回避策の 1 つは、アプリの 2 つのバージョンを作成することです。1 つはサード パーティ コンポーネントにリンクし、もう 1 つはリンクしていませんが、2 番目のビルドの維持と配布にかかる余分な時間を避けたいと考えています。
理想的には、配布から .DLL を単純に除外したいのですが、これを行うと、「XXXXX.DLL が見つからなかったため、このアプリケーションは開始できませんでした」というエラーが表示されます。アプリケーションを再インストールすると、この問題が解決する場合があります。これは、コードでキャッチして処理できる例外ですか? または、提供されている特定の機能を呼び出して処理するまで .DLL の読み込みを遅らせることはできますか?
環境はVS2003とVS2008です。
g++ - LD_LIBRARY_PATH を無視し、リンク時に -rpath で指定されたライブラリを使用する
私は自分が実際にコントロールできない環境に座っています (それは私だけではないので、基本的に、環境を変更することはできません。また、他の誰のためにも機能しません)。私が影響を与えることができる唯一のことは、バイナリがビルドされます。
私の問題は、環境が、使用されているコンパイラと互換性のない libstdc++ を含む LD_LIBRARY_PATH を指定していることです。私はそれを静的にコンパイルしようとしましたが、それは g++ では可能ではないようです (バージョン 4.2.3 は、後のバージョンではこの方向で作業が行われたようですが、利用できない -static-libstdc++ など)。
これで、rpath を使用して絶対パス名を実行可能ファイルに焼き付けることができました (動作するはずです。動作するはずのすべてのマシンは同一です)。残念ながら、LD_LIBRARY_PATH が rpath よりも優先されるように見えます (LD_LIBRARY_PATH をリセットすると、ライブラリを見つけることができることが確認されましたが、上記のように、LD_LIBRARY_PATH は全員に設定され、私はそれを変更できません)。
rpath を LD_LIBRARY_PATH よりも優先させる方法はありますか、または私の問題に対する他の解決策はありますか? 実行時の動的リンクについて話していることに注意してください。コンパイルおよびリンク時にコマンドラインを制御できます。
ありがとう。
c++ - OS Xのどのダイナミックライブラリを当然のことと見なすことができますか?
インストールを容易にするためにOSXプログラムを可能な限り自己完結型にしたい場合、誰もが、またはほとんどの人が持つことを期待できるダイナミックライブラリは何ですか?それを知っていれば、すべての静的ライブラリをコンパイルする必要はありません。
qt - Qt アプリが Qt モジュールを見つける場所を設定するにはどうすればよいですか?
libQtGui.so.4 libQtNetwork.so.4 と libQtCore.so.4 をアプリと同じディレクトリに含めたいと思います。Qtにこれを理解させるにはどうすればよいですか? y の目的は、共有ライブラリを使用するスタンドアロン アプリを用意することです