C++ でいくつかの共有ライブラリを作成する必要があり、開発者のオペレーティング システムとして Linux を使用しました。dlsym
/を介してシンボルをロードする場合は、シンボルを表示する必要があることを知っていますLoadLibrary
。したがって、Linux では、すべてのシンボルが次のパターンに従いました。
extern "C" [[gnu::visibility("default")]] void f();
C++11 を有効にして clang を使用したところf
、ホスト プログラムに読み込むことができました。Windows に移行したとき、C++11 を有効にして GCC 4.8.2 を使用し、そのパターンは Windows マシンでも動作しましたLoadLibrary
。(新しい属性構文には C++11 を使用する必要がありました)。__declspec(dllexport)
Windows では、共有ライブラリからシンボルをエクスポートするために使用する必要があることを知っています。ならどうしよう?__declspec(dllexport)
もう必要ありませんか?
編集:
ここで、それらは同義語であることがわかりました(私は思います)ので、特定のターゲットにマクロと s を使用しないようにする[[gnu::attribute]]
ための理由はありますか?__declspec(dllimport)
ifdef