4

プロジェクトを VS 6 から VS 2010 にアップグレードしています。リリース モードでビルドしているときに、以下のエラーが発生します。

 1>Creating library .\Release\JfFrpF32.lib and object .\Release\JfFrpF32.exp> 
 1>FLD_.obj : error LNK2019: unresolved external symbol __imp__debugf referenced in  function "int __cdecl fld_new(char *,unsigned char,unsigned char,short,char,char,unsigned char,short,char,double,double,short,char *,char,short,short)" (?fld_new@@YAHPADEEFDDEFDNNF0DFF@Z)
 1>Release/JfFrpF32.dll : fatal error LNK1120: 1 unresolved externals
 1>
 1>Build FAILED.

私を助けてください..事前に感謝..

4

2 に答える 2

5

LNK2019の原因となる一般的な問題は次のとおりです。

  • シンボルの宣言にスペルミスが含まれているため、シンボルの定義と同じ名前ではありません。

  • 関数が使用されましたが、パラメーターのタイプまたは数が関数定義と一致しませんでした。

  • 呼び出し規約(__cdecl、__ stdcall、または__fastcall)は、関数宣言と関数定義の使用方法が異なります。

  • シンボル定義はCプログラムとしてコンパイルされたファイルにあり、シンボルはextern"C"修飾子なしでC++ファイルで宣言されています。その場合は、宣言を変更してください。

詳細については、こちらをご覧ください

于 2012-09-19T11:38:38.387 に答える
1

私の場合、 を使用したにもかかわらずextern "C"、未解決のシンボル エラーが発生しました。
hppは

extern "C"
{
class A
{
public:
    void hi();
};
A* a;
DECLDIR int Connect();
}//extern

そしてcppは

#include "DatabasePlugin.hpp"// Include our header, must come after #define DLL_EXPORT


extern "C" // Get rid of name mangling
{   
    DECLDIR int Connect()
    {
        a = new A();
        a->hi();
        return 0;
    }//Connect
}//extern

hi()問題は、関数の実装を作成していなかったことです。追加することで問題は解決しました。このような:

extern "C" // Get rid of name mangling
{   
    void A::hi() {}

    DECLDIR int Connect()
    {
        a = new A();
        a->hi();
        return 0;
    }//Connect
}//extern

Hi()事前に宣言するConnect()必要があることも重要な場合があります。

于 2013-04-12T05:09:21.167 に答える