2017-02-02 9 views
0

私は、ライブラリーのシンボルdlopen()dlsym()を読み、動的ライブラリーを開き、シンボルをライブラリーにロードしました。「Windowsは適切な動的リンクをサポートしていませんか?

これらの呼び出しは、Windows 'LoadLibrary()GetProcAddress()と同等であるようです。

この投稿の「Windowsでは適切な動的リンクがサポートされていません」と表示されています。Running LLVM passes on Windows 10 gives no output in terminal?

LinuxとWindowsの動的ライブラリ呼び出しが異なる理由は何ですか?

Linux上のダイナミックライブラリが実行可能ファイルにシンボルをロードできる点は唯一の点ですか?しかしこれは、実行ファイルがLinux上のライブラリであることを意味します。dlopen()が動的ライブラリで動作するためです。

答えて

3

Windows は、適切な動的リンクをサポートしています。違いは、Windowsがという不適切なダイナミックリンクをサポートしていないことです。ここでは、ライブラリに対して実行可能ファイルをリンクしています(間違った方法)。 Windowsの実行ファイルにエクスポートテーブルがないため、この間違いは不可能です。

あなたのロジックには欠陥があります。実行可能ファイルと動的ライブラリは、たとえWindows上でさえそれほど違いはありません。実際にはLoadLibraryは実行ファイルを読み込みます。それは失敗するGetProcAdddressです。

プラグインのロジックは、抽象クラス(純粋仮想クラス)をインターフェイスとして使用してC++で配置するのはかなり簡単です。

+0

Windowsがその実行可能ファイルのエクスポートテーブルを持っていない理由を知っていますか? – Shuzheng

+0

プラグインがC++でどのように作られているかをリンクしてみませんか? – Shuzheng

+0

私はあなたが "実行ファイルに対してライブラリをリンクする場所"を意味すると思います。 – Shuzheng

関連する問題