問題タブ [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.
windows - MFCの既定のDllMainは、DLL_PROCESSS_DETACHのExitInstanceを呼び出しませんか?
MFC 8.0用の既定のDllMainは、DLL_PROCESS_DETACHを取得したときにExitInstanceを呼び出さないようです。考えられる解決策の1つは、独自のDllMainを定義することですが、リンカーにMFCではなく私のものを使用するように指示するにはどうすればよいですか?
または、私が知らないDLL_PROCESS_DETACHで呼び出される別のオーバーライドはありますか?
c - 動的にリンクされたライブラリでグローバル変数を参照するにはどうすればよいですか?
環境は 32 ビット SPARC 上の Solaris ですが、これは動的リンクや位置に依存しないコードに関するより一般的な問題だと思います。
位置に依存しないコードとしてコンパイルし、C プログラムから動的にリンクするアセンブリ プログラムがあります。アセンブリプログラムからアセンブリプログラムによって予約されたメモリを参照できないことを除いて、正常に動作します。アセンブリ プログラム内でのジャンプは正常に機能します。
アセンブリ プログラム内でメモリを読み書きしたいだけですが、試行するたびにセグメンテーション エラーが発生します。
この問題をデバッグするためにこのテスト プログラムを作成しました
これをにコンパイルします
-K PIC -b として
結果の.soをCでdlopenします
を呼び出すとdl_testprog()
、「4」が出力されます。testprog または print_int のアドレスを出力しようとすると、"4" も出力されます。ラベルにジャンプすると、他のすべてが正常に機能します。逆アセンブルを見ると、当然のように foo が 0x0 に置き換えられています。
_GLOBAL_OFFSET_TABLE_
アセンブリプログラム内で自分のメモリに書き込むことができるようにするには、何かを実行する必要がありますか? もしそうなら、どうすればいいですか?私が試したすべての結果がセグメンテーション違反であり、これを行うための非常に優れたガイドを見つけることができませんでした (これは、あなたがそれを行うべきではないと私に信じさせます.とにかく、これはリンカーの問題ではありませんか?) .
c++ - ライブラリとしての C++ ソース コードのビルド - どこから始めればよいでしょうか?
数か月にわたって、50 奇数のヘッダー/ソース ファイルをインポートするのではなく、ライブラリとしてビルドして動的にリンクしたい、十分に汎用的な機能をいくつか作成しました。
プロジェクトは Xcode と Dev-C++ で管理されており (自分のやりたいことを実行するにはコマンド ラインを使用する必要があるかもしれないことは理解しています)、OpenGL と SDL にリンクする必要があります (SDL の場合は動的に)。ターゲット プラットフォームは Windows と OS X です。
私は一体何を見ているのでしょうか?
- ライブラリが必要な場合、ライブラリのエントリ ポイントは何になりますか?
- コードで何を変更する必要がありますか? (呼び出し規約?)
- どうすれば解放できますか?私の理解では、ヘッダーとコンパイルされたライブラリ (.dll、.dylib(、.framework)、それが何であれ) をプロジェクトで使用できるようにする必要があります。特に、テンプレート機能は本質的にライブラリに含めることができないためです。
- 他に何を知っておく必要がありますか?
c++ - C++ ダイナミック ライブラリとのコンパイラ間の非互換性の問題を解消する
...、これのフォローアップ。
参照された質問に対する回答から、次のことを学びました。
- 異なるコンパイラは異なる名前装飾を使用するため、コンパイラ A でビルドされた C++ ダイナミック ライブラリをコンパイラ B でビルドされたプロジェクトで使用することはできません。
- ライブラリは、プロジェクトに n 個のヘッダーとソース ファイルを含めたり、シンボルをエクスポートしたりする静的保存としてビルドできます。(別のコンパイラで使用するためにライブラリを再構築しても保存されません。)
言われていることを踏まえてSDLを詳しく見てみると、そのリンクには2つのレイヤーがあることに気付きました。私のSDLプロジェクトでは、libSDL.aに対して静的にリンクし、次にlibSDL.aがSDLに対して動的にリンクします。 dll を使用することで、コンパイラごとに異なる .dll バージョンを用意する必要がなくなります。
問題は、これが本当に事実であり、問題に対する実行可能な解決策であるかどうか、または何か (そして何が) 不足しているのかということです。
file - Installshield の動的リンクの下のフォルダーを除外する
InstallShield の動的リンクの下にあるフォルダーを除外する方法はありますか?
したがって、PATH A から始まる動的リンクがあり、以下はディレクトリ構造の小さな例です。
現在、PATH A から始まり、サブディレクトリを含み、*.* ワイルド カードを使用していくつかの明示的なファイルを除外する動的リンクがあります。
ここでやりたいことは、ディレクトリを完全に除外することです。たとえば、上記のディレクトリ構造の例から PATH F を完全に除外します。
c++ - Windows上のインターポーザー
LD_PRELOADを使用してLinuxおよびSolarisで可能なように、システム機能を置き換えることは可能ですか?
たとえば、環境変数を設定することにより:LD_PRELOAD = / path / to / mymalloc.so
システムライブラリにすでにインストールされているCランタイムではなく、置換するmalloc関数を使用します。システムdllの他のすべての関数は、通常どおり実行されます。
c - 同じライブラリを静的および動的にリンクする
ライブラリに静的にリンクしているプログラム ( libA.2.0.a
) と、別のライブラリに動的にリンクしているプログラム ( ) がありlibB.so
ます。libB.so
また、古いバージョンの libA ( libA.1.0.so
) に動的にリンクします。
この構成は可能ですか?もしそうなら、システムはlibA.2.0.a
自分のプログラムの for からのシンボルと forlibA.1.0.so
からのシンボルを使用することをどのように知っていlibB.so
ますか?
c++ - C++ のグローバル初期化はどの程度遅延する可能性がありますか?
globals/static-class-members のすべての初期化は、main() の最初の行の前に行われると考えることに慣れています。しかし、私は最近、「モジュールの動的ロードを支援する」ために、標準が後で初期化を行うことを許可していることをどこかで読みました。動的リンク時にこれが当てはまることがわかりました。ライブラリを dlopen する前に、ライブラリで初期化されたグローバルが初期化されるとは思いません。ただし、静的にリンクされた翻訳単位 (私のアプリの直接の .o ファイル) のグループ内では、この動作は非常に直感的ではありません。これは、動的にリンクするときにのみ遅延して発生しますか?それともいつでも発生する可能性がありますか? (または、私が読んだものが間違っていましたか?;)
c# - C#プラグインフレームワークを構築する方法は?
C#アプリケーション用のプラグインフレームワークを実装したいと思います。これにより、アプリケーションはコンパイル時に使用可能なすべての.DLLを知る必要はありませんが、実行時に動的にリンクできます。プラグインとの間で情報をやり取りするために、いくつかの予想されるパラメーターを設定する必要があると思いますが、他に何が必要か、C#でこれをどのように行うかはよくわかりません。この実装のパターン、またはこれを実現するために実装できるフレームワークを教えてください(APIの場合-オープンソースライセンスが必要です)。
macos - 依存ライブラリを含む Mac OS X を配布するには?
libSDL、libSDL_ttf などのいくつかの動的ライブラリに依存するプログラム (具体的には、SO DevDays カウントダウン アプリ チャレンジへのエントリ) があります。私はこれらのライブラリ/opt/local/lib
を MacPorts 経由でインストールしましたが、多くの人はこれらをインストールしていません (インストールしていても、その場所にインストールしていない人もいます)。
これらのライブラリをインストールしていない人がすぐに実行できるように、プログラムを配布するにはどうすればよいですか? もちろん、さまざまなファイルを配布する必要がありますが.dylib
、これだけでは不十分です。動的ローダーは、私がインストールした場所にインストールされているライブラリを探します。Windows が DLL で行うように、動的ローダーに実行可能ファイルの現在のディレクトリを調べるように指示する方法はありますか? 環境変数 (例: DYLD_LIBRARY_PATH
) を変更する必要はありません。これも、すぐに使えるようにしたいからです。