4

コードがクロスプラットフォームであることを確認しながら、共有ライブラリシンボル(Visual Studioのクライアントコードからリンクするため)を適切にエクスポートするにはどうすればよいですか?具体的には、推奨される方法で.defを使用していますか、それとも__declspec(dllexport)にプラットフォーム固有のマクロを使用する必要がありますか?マクロを使用する必要がある場合、クロスプラットフォームに適した例を挙げていただけますか?

クロスプラットフォームで使用するためのネイティブC++コードがいくつかあり、Cmakeを使用して.sln / .vcxprojファイルを生成し、Windowsで使用する.dllファイルを作成します。C ++ / CLIラッパー(これもdll)からこのdllにリンクするには、.libが必要です。これには、シンボルのエクスポートが必要です。__declspec(dllexport)または.defファイルのいずれかを使用する必要があることを学びました。私の懸念は、MSVCのもので共有コードを調整したくないということです(Linux、iOS、Mac OSX、Androidをサポートする必要があります...)。

4

1 に答える 1

2

SethCarnegieのリンクgcc.gnu.org/wiki/Visibilityは、おそらくこの質問に対する間接的な答えです。要するに、私はマクロ(プリプロセッサシンボル)を使用することに決めました。これは、いくつかの計画を立てれば、クロスプラットフォームでうまく機能するようです。.defはコードから分離されていますが、インポートするための対応する方法はありません。つまり、__ declspec(dllimport)を使用する必要があります。IMOはあまりクリーンではありません。

私のようにこのトピック(クロスプラットフォーム、マネージコードからのアンマネージC ++を使用)に慣れていない場合は、ここで例として行ったことを確認できます(質問の部分を参照): にリンクしているにもかかわらず、マネージC++からアンマネージC++にリンクする際のリンクエラー。エクスポートされたシンボルを含むlibファイル

于 2012-07-18T15:31:05.947 に答える