問題タブ [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.
exception - Boost pythonによるモジュール間例外名解決が機能しませんか?
これが私の問題です:
ダイナミックリンクライブラリとして構築された2つのC++モジュールAとBがあります。Aは、基本的な数学関数とカスタム例外タイプを提供します。Bは、Aを使用する上位レベルのモジュールです。
B :: someFunction()はAから関数を呼び出し、カスタム例外A:MyExceptionFromAをキャッチして、カスタムタイプB:MyExceptionFromBに変換しようとします(モジュールBのユーザーはAの実装の詳細を知る必要がないため) )。
私がC++ドメインに留まっている限り、すべてが正常に機能します。ただし、BoostPythonを介してPythonでB:: someFunction()を公開すると、C++モジュールで例外がキャッチされなくなります。
A:MyExceptionFromAの派生元であるstd :: runtime_errorをキャッチし、typeid(e).name()を呼び出して正しいマングル名を取得できるので、正しい例外がスローされることがわかります。したがって、問題は、このマングルされたシンボルを正しい例外タイプに解決することに起因すると思われます。
このリンクを見つけました。これは、「Pythonは[insular]モデルを使用して拡張モジュールを開くため、拡張モジュールの作成者は他の拡張モジュールが使用している可能性のあるシンボルを知る必要がない」と説明しています。これは問題/解決策の一部であると思われますが、問題を解決する方法を理解するためのシンボル解決について十分に理解していません。
何か案は?
xcode - リンクがジャッキアップされています..-rpathとは何ですか?MacOS X
だから、私はプロジェクトを構築していて、それはコンパイルされたライブラリ(.dylibまたは.so)からの関数を使用しています。適切な場所にヘッダーとライブラリファイル(これはすべてQtRootの一部です)がありますが、Xcodeでプロジェクトをビルドしようとすると、デバッガーエラーが発生します。
dyld:ライブラリがロードされていません:@ rpath / libRIO.so参照元:/Users/paulthompson/Documents/Programming/Build Products / Debug / MacHeliosSim.app / Contents / MacOS / MacHeliosSim理由:イメージが見つかりませんsharedlibrary apply-load-rules allデータフォーマッタは一時的に利用できません。「続行」後に再試行します。(現在、ローダーを呼び出すことはできません。ロックされています。)
これで、ビルドされたプログラム自体は、Finderから開くと問題なく実行されますが、Xcodeから実行しようとすると、私はそれを妨害します。このrpathとは何ですか。また、Xcode自体がライブラリの場所を認識しているにもかかわらず、デバッガーがライブラリを検出できないのはなぜですか。また、Finderから実行すると、プログラムもライブラリを検出できるようです。
mfc - BOOST 1.35 を 1.43 にアップグレードすると、__pRawDllMain (mfc 関連) でリンカー エラーが発生する
職場では、1.35 で正常にビルドされた MFC 拡張 DLL がありますが、1.43 でビルドすると次のエラーが発生します。
BOOST_LIB_DIAGNOSTIC を有効にすると、古いビルド リストが表示されます。
と
したがって、リンクされているライブラリに変更はありません
完全なエラー メッセージは次のとおりです。
両方のライブラリ バージョンで tss_pe.cpp の diff を実行しましたが、それらは同一であるため、何が問題なのかわかりません。
定義することでメッセージを消すことができますが、BOOST_THREAD_USE_DLL
BOOST_THREAD-VC71-MT-GD-1_43.DLL を出荷する必要があるため、これが最善の解決策ではないと思います。
python - Python ctypes が Mac OS X で動的ライブラリをロードしない
repeater.so
次の方法で Linux の Python からロードできるC++ ライブラリがあります。
ただし、Mac OS X (Snow Leopard、32 ビット) で同じライブラリをコンパイルして getrepeater.dylib
し、Python で次を実行すると:
次のエラーが表示されます。
Mac OS X 上の Python で動的ライブラリをロードするには、別のことを行う必要がありますか?
c++ - C ++ -fvisibility = hidden -fvisibility-inlines-hidden
C++の可視性属性について質問があります。http://gcc.gnu.org/wiki/Visibilityを読みましたが、それがどのように機能するのかよくわかりません。
所有している共有ライブラリの一部で可視性を非表示にしたいと思います。これはシンボルが隠されていることを意味すると思いますか?
では、共有ライブラリをどのようにリンクするのですか?特別な方法はありますか?通常の方法でリンクすると、機能しません。
誰かが私を助けてくれませんか。
c++ - 静的ライブラリと動的 (共有) ライブラリを混在させていますか?
Core (静的または DLL としてコンパイル可能)、Graphics (静的または DLL としてコンパイル可能 - Ogre を扱う)、Physics (ライセンスのために静的としてのみコンパイル可能 - Havok)の 3 つの異なるライブラリを使用しています。その後、プロジェクトは必要に応じてライブラリを組み合わせて使用します。Physics部分はGraphicsとCoreの一部の機能に依存していますが、GraphicsはCoreの一部の機能に依存しています。プロジェクトは、デバッグとリリースで静的にリンクされたすべてのライブラリで正常に動作します。Coreの動的にリンクされたライブラリを使用すると、次のエラーが発生します。グラフィックスですが、静的にリンクされた物理ライブラリです。
エラー 1 エラー LNK2005: "public: unsigned int __thiscall OgreFW::FwErrorLog::GetError(void)" (?GetError@FwErrorLog@OgreFW@@QAEIXZ) は既に FwCore_d_dll.lib(FwCore_d.dll) で定義されています FwHavok_d.lib
エラーの意味はわかりますが、これを回避する方法がわかりません。ライブラリがこのように相互に依存しており、物理エンジン (Havok) のライセンスで静的リンクしか許可されていない場合、設計を再考する必要がありますか (これは大きな問題です :( ) またはそれを回避する方法はありますか?
ありがとう
EDIT:すべてのライブラリがMDdでコンパイルされていることを確認するためにすでにチェックしました
EDIT2:使用できます/FORCE:MULTIPLE
が、それは問題を解決するのではなく隠しています
EDIT3: いくつかの編集をお詫びします。関数GetError()はヘッダーで定義されています。ソース ファイルに配置すると、リンク エラーはなくなります。何故ですか?
c - 「多すぎる」引数を外部関数に渡しても安全ですか?
この状況は、名前マングリングなしでのみ発生する可能性があるため (私は信じています)、以下のコードは C です。Ac で次のように定義された関数 A があるとします。
現在、別のファイル Bc もあります。
A は最初は 2 つの引数しか持たないと宣言されていますが、Bc で宣言すると余分な引数があり、B() で 3 番目の引数で呼び出されます。この状況が発生する可能性があることはわかっています。たとえば、fortran サブルーチンとリンクしている場合や、動的にリンクしている場合です。
関数に余分な引数を渡すのは安全ではないと思いますが、関数が呼び出されて引数が渡されたときにメモリ内で何が起こっているのか説明できますか? したがって、使用も要求もされていないこの「余分な」引数を渡すことがどれほど安全かということです。
余分な引数が、関数内で使用されるメモリ内のスペースを上書きする可能性はありますか? それとも、A への関数呼び出しは、引数用にメモリ内のスペースを割り当ててから、引数メモリ ブロックの先頭がどこにあるかを A に伝え、A は最初の 2 つの引数を読み取り、最後の引数を無視して、完全に安全にしますか?
関数に関する情報は非常に啓発的です、ありがとう。
c - アプリケーションによって動的にロードされているライブラリを追跡するにはどうすればよいですか?
私はアプリケーションを持っています(そのためのソースコードはありません)。
コマンドラインパラメータに応じて、共有ライブラリを動的にロードするように設計されていることを知っています。
ロードするライブラリがわかっているので、LD_LIBRARY_PATHを適切なディレクトリに設定しました。
アプリケーションは1つのサーバーで問題なく動作しますが、別のサーバーでは動作しません。
私はその理由を理解しようとしています。スクリプトがライブラリを探していることを確認できれば、それがどこにあるのかを追跡できれば助かります。
私を助けることができるツールはありますか?私はグーグルしてきましたが、私が見つけた情報のほとんどは、ldd
静的にリンクされたライブラリについてのみ実際に教えてくれるものです。
これはLinux環境であり、アプリケーションとライブラリは両方ともCで記述されています
ありがとう
.net - マネージコードからDLLを読み込もうとしているFileNotFoundException
まず、Windowsのリンクシステムに慣れていないということです。(私のプログラミング経験のほとんどは、ライブラリとフレームワークのリンクが根本的に異なるMac OSで取得されました。私もWindowsユーザーではありません。)
これが私の設定です。同じソリューションに2つのプロジェクトがあります。1つ目は、これから呼び出すC ++/CLIプロジェクトFoo
です。Foo
は、外部ライブラリ(Javaランタイム環境)に依存するライブラリプロジェクトであるため、適切な(コンパイルされるため).libファイルへの適切な参照があります。(そのライブラリのロードに関連する他のプロジェクト設定は変更していません。)他のプロジェクトBar
は、を参照するC#コンソール実行可能プロジェクトですFoo
。
どちらも問題なくコンパイルされます。
ただし、Bar.exe
C#プログラムを実行すると、からの型を必要とする最初のオブジェクトが作成される前に終了しますFoo
。例外はFileNotFoundException
、Foo.dll
アセンブリまたはその依存関係の1つが見つからなかったことを示すものです。
それで私fuslogvw
は何がうまくいかなかったかを見るために立ち上げました、しかし私はそれがどのように機能するか本当に理解していません、そして私がそれで見つけたドキュメンテーションはかなり役に立たないです。私が理解していることから、両方ともFoo
ネイティブBar
イメージとしてロードできませんでしたが、正しいILであることがわかり、その方法で適切にロードされました。失敗について他に関連する言及はありませんが、明らかにある時点で失敗します。ログを投稿しますが、フランス語で書かれているので、かなり役に立たないと思います。
何か案が?
c - C(lib * .so)ライブラリでのダイナミックリンク
実行可能ファイルと[lib*.so]ライブラリを引数として取り、@Run-timeにリンクするコードを作成しました。
(* .o)ファイル@ランタイムの関数も取り込んでリンクしたいと思います。しかし、私はそれについてどうやって行くのか分かりません。
編集1: リンクしようとしている関数は、lib*.soライブラリの.oファイルの一部です。 そこで、ライブラリ名と、同じライブラリにある関数名@Run-Timeを指定したいと思います。
たとえば。ライブラリに2つの関数(つまり* .oファイル)が含まれている場合、リンカーは@Run-Timeで使用する関数をコンパイルする必要があります。
私はコードを投稿しました、助けてください: