4

ソースコード内に(dllexport)ディレクティブがあるIMPLIBにもかかわらず、リンカーがDLLまたはEXE用に作成するのを防ぐためのおそらく文書化されていない方法はありますか?__declspec

/IMPLIB結果を指定しない.LIBと、デフォルトの名前で作成されます。

これは、declspecディレクティブが制御されていないサードパーティのコードから到着する場合に重要です。これは、たとえば、の場合boost::serializationです。考えられる解決策は、DLLエクスポートを「宣言解除」する方法です。DEFファイルもエクスポートリストに追加することはできますが、削除することはできないため、これを行うことはできません(AFAIK)。

4

4 に答える 4

2

これによると.exp、リンク時にファイルを指定すると、リンカはファイルを作成しません.lib。しかし、正直なところ、これがあなたの場合に役立つかどうかはわかりません。

于 2012-04-02T20:33:06.693 に答える
2

リンカオプションを使用してこれを行う方法はありません。リンカが.expファイルに名前を付けるために/implib: "nul"を使用すると、無残に失敗します。最も実用的な解決策は、ビルド後にファイルを再度削除することです。プロジェクト+プロパティ、ビルドイベント、ビルド後のイベントと貼り付け:

del $(TargetDir)$(TargetName).lib
del $(TargetDir)$(TargetName).exp

ここに画像の説明を入力してください

于 2013-03-03T22:20:02.083 に答える
2

PRIVATEキーワードでマークされたエクスポートされた関数を含む.defファイルを使用すると、インポートライブラリへのシンボルの配置をスキップするようにリンカーに指示されます。

MSVCの.defファイル構文の詳細については、このMSDNページを参照してください。

于 2013-03-05T01:18:03.407 に答える
1

多くのサードパーティコードは直接使用しません__declspec(dllexport)が、それを制御するためにマクロの下に隠します。通常、ヘッダーファイルがインクルードされている場所(dll実装内またはdllのユーザーによる)に応じdllexportて切り替えたいと考えています。dllimport

それがライブラリに当てはまる場合は、マクロ操作を介してこの動作を変更して正確なニーズを満たすことはそれほど難しくないはずです。

たとえば、をboost::serializationチェックして、config.hppそれを制御する方法を確認してください。

于 2013-03-03T16:44:46.670 に答える