2011-08-15 8 views
1

「純粋な」C .cファイルであるプロジェクトのいくつかのcppファイルから作成された静的ライブラリをリンクするのに問題があります。Visual Studio C++スタティックライブラリのエクスポート名を強制する

logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders 

しかし、このようなの.libファイルのエクスポート、それを::ファイルMの ダンプ:... \リリース\のrecvevent.lib

.Cファイルは次のように、構文_FUNCTIONAMEと関数オブジェクトを探しています
File Type: LIBRARY 

    Exports 

     ordinal name 

        [email protected]@[email protected] (unsigned int __cdecl _getE 
ventLogProviders(char * *)) 

    Summary 

      C3 .debug$S 
      14 .idata$2 
      14 .idata$3 
      4 .idata$4 
      4 .idata$5 
      C .idata$6 

マイexports.defファイルは次のようになります、

EXPORTS 
getEventLogProviders=getEventLogProviders @4 

プロジェクトが正常にリンクすることができ、ライブラリ、このような関数をエクスポート:

Dump of file M:\...\screenshot.lib 

File Type: LIBRARY 

    Exports 

     ordinal name 

        [email protected] 

私は間違っていますか?

答えて

2

デコレーションでは、エクスポートされた関数の先頭にアンダースコアが追加され、最後に@が追加されます。あなたの.defファイルは、したがって、次のようになります。それが今で

[email protected] 

として符号化された関数が正しく書き込まれていないとして、.defは、任意の効果はありません。

+0

ほとんどのところ、dumpbinは私に "getEventLogProviders"を関数名として与え、リンクしても "_getEventLogProviders"を検索します。 – Konrads

+0

動作した行: "_getEventLogProviders = _getEventLogProviders @ 4" – Konrads

+0

これは別のバグです。エクスポートを使用するプログラムが正しい呼び出し規約を使用していません。 __stdcallの代わりに__cdeclを使用します。実行時にスタックの不均衡を招き、診断が非常に困難になります。 –

関連する問題