問題タブ [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++ - 動的ライブラリと静的ライブラリをいつ使用するか
.dll
C++ でクラス ライブラリを作成する場合、動的 ( 、 ) ライブラリ.so
と静的 ( .lib
、 ) ライブラリのどちらかを選択できます.a
。それらの違いは何ですか?また、いつどちらを使用するのが適切ですか?
python - Python から dll を読み込む
ここで見つけたソースコードからPythonアプリケーションを構築しています
Web を検索していくつかの問題をコンパイルして修正することができましたが、この時点で立ち往生しています。
アプリケーションを実行すると、このメッセージが表示されます。
代替テキスト http://img511.imageshack.us/img511/4481/loadfr0.png
この python アプリは、swig を使用して c/c++ コードにリンクします。
私は VC++2005 Express Edition を持っており、scons と Python 2.5 と共にコンパイルするのに使用していました (そして 2.4 も試しました)。
ロードしようとしているdllは「msvcr80.dll」です。これは、メッセージが「msvcr80.dll」になる前に見つからないか、そのようなものであるため、取得してwindow32フォルダーにドロップしました。
私がここで読んだことについて: http://msdn.microsoft.com/en-us/library/ms235591(VS.80).aspx
解決策は、マニフェストと dll ファイルを使用して MT を実行することです。私はすでにそれを行いましたが、どちらも機能しません。
誰かが私を正しい方向に向けることができますか?
これは、マニフェスト ファイルの内容です。
今、Python 2.6 を試してみますが、問題を理解できるかどうかはよくわかりませんが、Python 2.5 と Python 2.5 の .exe には、.exe ファイル内に文字列 "MSVCR71.dll" が含まれていました。しかし、おそらくこれは何の関係もありません。
ps。すべてがjarファイルと同じくらい簡単だったら:(
これは完全を期すためのスタック トレースです。
linux - 異なるバージョンの複数の共有ライブラリをロードする
Linux上に(別の共有ライブラリを介して)依存関係の1つとしてロードするlibfoo.so.1
(つまり)実行可能ファイルがあります。SONAME
また、別のシステムライブラリにリンクし、システムライブラリはシステムバージョンにリンクしますlibfoo.so.2
。その結果、との両方が 実行中に読み込まれ、バージョン1のライブラリから関数を呼び出すはずだったコードは、バージョン2の新しいシステムライブラリから(バイナリ非互換の)関数を呼び出すことになります。これは、一部のシンボルが同じままであるためです。その結果、通常、スタックスマッシングとそれに続くセグメンテーションフォールトが発生します。libfoo.so.1
libfoo.so.2
現在、古いバージョンに対してリンクしているライブラリはクローズドソースのサードパーティライブラリであり、どのバージョンlibfoo
に対してコンパイルするかを制御することはできません。と仮定すると、残っている他の唯一のオプションは、現在リンクしているシステムライブラリの束を再構築しlibfoo.so.2
てリンクすることlibfoo.so.1
です。
古いものにリンクするローカルコピーでシステムライブラリを置き換えることを回避する方法はありますlibfoo
か?両方のライブラリをロードして、正しいバージョンのシンボルを呼び出すコードを作成できますか?だから私はいくつかの特別なシンボルレベルのバージョン管理が必要ですか?
c - dlsym の使用とフラグへの -ldl の追加
を使用する C プログラムを作成しようとしていますがdlysm
、dlysm への未定義の参照が引き続き発生します。フラグを設定する必要があると思います-ldl
が、これを行う方法がわかりません。
私はLinuxと変数の設定に非常に慣れていません。これが私がしなければならないことである場合、誰かがコマンドで私を助けることができますか?
java - PHP スクリプトから Java (または python または perl) を呼び出す
私は Django で単純なプロトタイプ アプリケーションを構築しようとしてきましたが、残念ながら複雑すぎるため、あきらめる段階に達しています (長期的には価値があることはわかっていますが、実際にはそうではありません)。十分な時間がありません -- 数日以内に稼働させる必要があります)。そのため、代わりに PHP を使用することを考えています。PHP は動的な Web コンテンツを作成するための方法であり、私が最も慣れ親しんでおり、何かをすばやく動作させることができることを知っています。
私のアプリケーションは単純ですが、おそらくかなり複雑な AI 処理を実行する予定であり、PHP で必要なものに対応するライブラリが存在しない可能性があります。だから、PHPスクリプトがJavaプログラムやPythonスクリプト、または別の言語のプログラムやスクリプトを「呼び出す」ことがどれほど簡単/可能か疑問に思っています。このコンテキストでの「呼び出し」が正確に何を意味するのかは完全には明らかではありませんが、理想的には、たとえば Java で関数を定義し、それを PHP から呼び出すことができるようにしたいということを意味していると思います。それが不可能な場合、私の最善の策は (PHP を使用すると仮定して) CGI プログラムなどへの POST または GET を介して明示的に制御を直接外部プログラムに渡すことだと思います。
私は Django を使い続けるべきだと私に納得させてください.もっと複雑なことをする可能性...
または、PHP と他の言語のリンクについてアドバイスを提供できる人なら誰でも歓迎します。
resources - コンパイル時のリンク プロセスに関する優れたリソース
私はしばらくの間コーディングを行っており、コンパイルのリンク段階は非常に簡単だといつも思っていましたが、最近アプリにプラグイン システムを追加する必要があり、かなりの数のコンパイルと実行時の問題に遭遇しました。この問題に関する私の完全な知識不足。今では問題なく動作し、その過程で多くのことを学びましたが、このテーマについてまだ学ぶべきことがたくさんあることに気付いたので、このテーマをもっと探求したいと思いました. それで、「コードセクション、シンボル、リンク、動的/静的ライブラリ...」ビジネス全体に関する記事、ブログ投稿、または本について誰かが良い指針を持っているかどうか疑問に思っていました.
私は gcc と ld を使用して Linux で開発していますが、M$ のやり方にも興味があり、知識を渇望しています :)
ありがとう!
c - C 識別子の制限
Cから名前マングルされたシンボルを呼び出す方法は?
自分の言語で記述されたコードパスを C で使用できるようにしたいと考えています。関数呼び出し規則はほぼ同じです。エクスポートするシンボル内のバージョンとモジュールパスを変更する必要があるだけで、C と同じ識別子規則を使用しているため、アンダースコアだけを使用することはできません。
x86 - smalltalk オブジェクトとの動的リンク
私の smalltalk 方言に動的リンクを実装することを計画しています。問題は、動的リンクでメッセージ パッシングを機能させることです。
メッセージの受け渡し自体は次のように単純です。セレクターを含むメッセージがオブジェクトに送信され、オブジェクトはそのプロトコルからセレクターに一致するメソッドを取得し、メッセージにバンドルされたデータを処理して結果を返します。
画像ベースの実装では、非常に簡単な方法でメッセージ パッシングを実装できます。メッセージ セレクターは、グローバル シンボル テーブルから変換された単なる整数にすることができ、プロトコルは、整数とアドレスを含むハッシュ テーブルにすることができます。そのグローバル シンボル テーブルを使用して、すべてが 1 つの大きなイメージにコンパイルされていると仮定します。
動的リンクでは、シンボル テーブルが正しいセレクターを指していると想定することはできません。文字列をセレクターとして使用することで問題を回避できますが、言語が遅くなる運命にあります。
1 つの方法があり、プロトコルとセレクターのテーブルをコピーして、プロセスがそれらを適切に再配置する必要があります。しかし、それはかなりの労力のように聞こえます。
この問題を解決するためのより良い方法はありますか? また、動的リンクはそれだけの価値がありますか? セレクターとプロトコルの再配置を実装するにはどうすればよいですか?
c++ - g++: 静的ライブラリと動的ライブラリをリンクする順序は?
「my_app」というメインの実行可能ファイルがあり、他のいくつかのライブラリを使用しているとします。3 つのライブラリは静的にリンクされ、他の 3 つのライブラリは動的にリンクされています。「my_app」に対してどの順序でリンクする必要がありますか?
しかし、これらはどの順序でリンクする必要がありますか?
libSB に依存する libSA (静的 A のように) と libSB に依存する libSC を取得したとします。
および 3 つの動的ライブラリ: libDA -> libDB -> libDC
(libDA
は基本、libDC
は最高)
これらはどの順序でリンクする必要がありますか?基本的なものは最初ですか、それとも最後ですか?
正しい順序のように思えますが、そうですか?動的ライブラリと静的ライブラリの間に依存関係がある場合、またはその逆の場合はどうなりますか?