問題タブ [dynamic-library]
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.
java - eclipse はプラグインのバイナリ ライブラリをどこで検索しますか?
バイナリ ライブラリを使用して一部の作業を行う Eclipse プラグイン (サード パーティによって開発されたもので、ソース コードはありません) があります。ライブラリはオープンソースです。配布されたプラグインには Windows 用のバイナリしか含まれていませんが、他のプラットフォーム用に簡単にコンパイルできます。私が理解できないのは、図書館をどこに置くべきかということです。私は現在 OS X で作業していますが、Linux も問題です。
Windows ライブラリは、eclipse/plugins/plugin_name/os/win32/x86 に配置されます。os/macosx/x86_64 (org.eclipse.osgi.service.environments の定数に対応) と他の多くのバリアントを使用してみましたが、何も機能せず、Eclipse がどのように設定されるかに関するドキュメントが見つかりませんライブラリ パス。
ライブラリをプラグイン サブディレクトリのどこに配置すれば、Eclipse が適切なプラットフォーム用にライブラリをロードできるようになりますか?
ios - 関数'dlopen()'はプライベートAPIですか?
関数「dlopen()」を使用してiOSプラットフォームでダイナミックライブラリを呼び出したいのですが、関数「dlopen()」はプライベートAPIですか?
c++ - C++静的にリンクされた共有ライブラリ
*.soオブジェクトを必要とする私の制御できない別のアプリケーションによって使用される共有ライブラリがあります。私のライブラリは、静的にリンクする必要があるsqlite3を利用しています(自己完結型のバイナリが絶対に必要です)。
ライブラリをコンパイルしてリンクしようとすると、次のようになります。
次のエラーが発生します。
-fPICを使用した再コンパイルとは何に関連していますか?私のコードまたはCRT?
私はすでに-fPICを使用してオブジェクトをコンパイルしようとしましたが、同じ結果になりました。
ありがとう。
編集:
この問題はSQLite3に関連していないようです。
私は次のようにコンパイルしてリンクする単純な1行何もしないライブラリを作成しました。
しかし、これは好きではありません:
この問題はCRT(crtbeginT.o)に関連しているようです。GCC --with-picなどを再コンパイルする必要がありますか?
visual-studio - 間接的に参照される DLL を参照する場合、MSBuild が Visual Studio と一致しない
この質問をして申し訳ありませんが、答えは「MSBuild は愚かで、VS は賢い」であると確信しています。
間接参照 DLL は、直接参照 DLL から参照されているが、プロジェクト内ではまったく参照されていない DLL です。
プロジェクト B (クラス ライブラリ) を参照するプロジェクト A (Web アプリケーション) があります。プロジェクト B には DLL 1 への直接参照 (プロジェクトで実際に使用されていることを意味します) があります。DLL 1 には DLL 2 への参照があります。
Visual Studio でビルドすると、DLL 1 と DLL 2 の両方がプロジェクト A (Web アプリケーション) のローカル ビンにコピーされます。MSBuild でビルドすると、DLL 2 はプロジェクト A のローカル ビンにコピーされません。
lib メソッドを使用せずに、DLL を bin へのコピー (参照ではなくファイルとして) としてマークし、/bin/lib のスキャンを追加せずに、これを修正する方法はありますか?
dylib - dlopen()エラーイメージが見つかりません
最初に.dylibをロードするソフトウェアがあり、次のコマンドを使用してlibFirst.dylibを呼び出すことができます。
後で、ロードされたlibFirst.dylibから関数内で、同じコマンドを使用して別の.dylibをロードしようとしますが、libSecond.dylibの場合、この共有ライブラリをロードすると、Xcodeコンソールに次の警告が表示されます。
私が得られないのは、libFirst.dylibがロードされていないということですが、現在libFirst.dylibの関数内にいるので、どうすればよいでしょうか。
DYLD_LIBRARY_PATHのすべてのパスも正しいように見えます。
事前のおかげで、私はこれに何日も立ち往生しています。
xcode - Xcode: .app プロジェクトを共有ライブラリとしてビルドするにはどうすればよいですか?
まず、MAC OS X 10.6 で Xcode 3.2.5 を使用しています。
正常にビルドおよび実行される Cocoa アプリケーション プロジェクトがあります。このプロジェクトには、次を使用してエクスポートする関数がいくつかあります。
エクスポートされた GetIUIEventHandler 関数を使用できるように、別の動的ライブラリ プロジェクトを元の Cocoa アプリケーションにリンクできるようにしたい場合は、どうすればよいですか?
元の Cocoa アプリケーションを動的ライブラリとしてもビルドする必要がありますか? または、Cocoa アプリケーションの実行可能ファイルをリンクする方法はありますか?
c - 動的モジュールでのメモリ割り当てに関する問題
私のプログラムはライブラリを正常にロードします(dlopen(...、RTLD_GLOBAL | RTLD_NOW);)。ライブラリ内には、malloc()関数を呼び出す1つの関数があります。小さなメモリ(たとえば、120バイト)を割り当てようとすると、この関数はうまく機能します。しかし、もっと多く(たとえば、1024バイト)を取得しようとすると、アプリケーションは次のような長いレポートで停止します。
データ交換、共有変数、スレッドなどはありません。
メインアプリケーションのメモリ割り当てとダイナミックライブラリの間にいくつかの違いはありますか?
linker - -Bsymbolic-functions を使用することの欠点はありますか?
最近、GNU ld のリンカ オプション「-Bsymbolic-functions」を発見しました。
-fvisibility=hidden
これは、参照された関数を他の共有オブジェクトにエクスポートするのを防ぐ代わりに、その関数へのライブラリ内部の参照が別の共有オブジェクトのエクスポートされた関数にバインドされるのを防ぐという点で、GCC オプションの逆のようです。関数の PLT エントリの作成を防ぐことができると自分-Bsymbolic-functions
に言い聞かせましたが、これは良い副作用です。
-Bsymbolic
しかし、ライブラリの個々の関数定義を上書きするなど、これをより細かく制御できるかどうか疑問に思っていました。を使用する際の落とし穴に注意する必要があり
-Bsymbolic-functions
ますか? は例外を壊すので、私はそれのみを使用する予定です-Bsymbolic
(typeinfoオブジェクトへの参照が統一されないようにするだろうと思います)。
ありがとう!
dynamic-linking - 動的リンク: 再配置テーブルのインデックスに使用されるオフセット値
私は動的リンクプロセスを理解しようとしています...ライブラリ関数への呼び出し(それを呼び出しましょうfunc
)はテーブルを通過しplt
ます。シンボルがまだ再配置されていないとき、関数の呼び出しが次の命令を指すような命令plt
を含むテーブルから渡されることを知っています。関数のアドレスを含むエントリ。再配置テーブルのエントリのインデックスである必要がありますが、わかりません...実行可能ファイルのelfを読み取ってこの値を見つける方法がわかりません。で可能ですi1
jmp *function_in_GOT
i1
push $offset
GOT
offset
何かを見つけるには?たとえば、前のコマンドの出力のみprintf
を使用する非常に単純なプログラムを作成しました。strcpy
たとえば、次gdb
の手順を読んでprintf@plt
ください。
offset
の値は0x18
(10 進数で 24) であることがわかりますが、出力を読み取ると、最初の reloc エントリからのobjdump
オフセットは のようです。printf
0x1c
いくつかのアイデア?
c - グローバル変数、共有ライブラリ、および -fPIC 効果
lib.c
動的ライブラリ ( ) とメイン実行可能ファイル ( )で構成されるコードを作成しましたmain.c
。両方のファイルで、次の名前のグローバル変数を定義しますint global
。あまり賢くはありませんが、それは問題ではありません。
動的ライブラリをコンパイルすると、-fPIC
オプションは必須のようです:
そうでなければ私は得る:
実行可能ファイルをコンパイルすると、そうではありません。
どちらも機能しますが、説明できない動作が異なりますね。:
-fPIC を使用すると、main.c のグローバルと lib.c のグローバルは同じ変数になります。
-fPIC を使用しないと、lib.c のグローバルは main.c のグローバルに関連付けられません。
ソースは次のとおりです。
lib.c
main.c
gcc --バージョン: gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
uname -a: Linux xxx 2.6.38-11-generic #48-Ubuntu SMP Fri Jul 29 19:02:55 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
edit : SUN/sparc および x86/Linux アーキテクチャで、同じ種類の予期しない共有グローバル変数 (-fPIC を使用) を使用してテストされたコード。