Oracle® Solaris Studio 12.4: C++ ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

4.1.1 Microsoft Windows との互換性

動的ライブラリに関して Microsoft Visual C++ (MSVC++) に含まれる類似のスコープ機能との互換性を保つため、次の構文もサポートされています。

__declspec(dllexport)__symbolic と同一です。
__declspec(dllimport)__global と同一です

Oracle Solaris Studio C++ でこの構文の利点を活用するときは、-xldscope=hidden オプションを CC コマンド行に追加するようにしてください。結果は、MSVC++ を使用する場合と比較可能なものになります。MSVC++ を使用する場合は、定義ではなく外部シンボルの宣言のみに関して __declspec(dllimport) が使用されることが想定されます。例:

__declspec(dllimport) int foo(); // OK 
__declspec(dllimport) int bar() { ... } // not OK  

MSVC++ は、定義に対する dllimport の許容が緩やかであり、Oracle Solaris Studio C++ を使用する場合の結果と異なります。特に、Oracle Solaris Studio C++ を使用して定義に対して dllimport を使用すると、シンボルがシンボリックリンケージではなくグローバルリンケージを持つ結果になります。Microsoft Windows 上の動的ライブラリは、シンボルのグローバルリンケージをサポートしません。この問題がある場合は、定義に対して dllimport ではなく dllexport を使用するようにソースコードを変更できます。その後、MSVC++ と Oracle Solaris Studio C++ で同じ結果を得ることができます。