2016-05-23 13 views
0

xyz.libを使用しているプロジェクト "proj1"をコンパイルしているときにエラーが発生しています(これは正常にコンパイルされた別のプロジェクトです)。Visual Studio 2005のC++でリンクエラーが発生する

Error 3 error LNK2019: unresolved external symbol "int __cdecl Vsnprintf16(unsigned short *,unsigned int,unsigned short const *,char *)" ([email protected]@[email protected]) referenced in function "int __cdecl eastl::Vsnprintf(wchar_t *,unsigned int,wchar_t const *,char *)" ([email protected]@@[email protected]) File : xyz.lib(abc.obj) 

abc.cppには、関数sprintfが呼び出されています。

abc.hとabc.cppのコードを別のものに移動すると、すでにxyzプロジェクトに存在するdef.hとdef.cppファイルがあると、すべて正常に動作し、リンクエラーは発生しません。どうしてか分かりません。

abc.cppのファイルdef.cppで使用されていたすべてのインクルードを使用しましたが、同じエラーが発生しました。

私はabc.cppからsprintf()呼び出しを削除するときに、すべて正常に動作します。

なぜこのようなことが起こっているのかご迷惑をおかけください。ありがとう

+1

プロジェクトはUNICODEで有効になっていますか? – marcinj

+0

はいユニコードマクロを有効にして無効にしてみましたが、同じエラーです。プロジェクト設定では、文字セットは "Unicode文字セットを使用する"です@marcinj – lsrawat

+0

あなたはこの関数の定義を自分で追加する必要があります。 – marcinj

答えて

1

私はmsdnとVS2015とVS2005のソースコードフォルダを検索し、定義または宣言が見つかりませんでしたVsnprintf16

私はeastlを使用していないが、それはあなたが自分でこの関数を定義する必要がありますように、あなたは以下のリンクの例を見つけることができますになります。参照用

https://github.com/BSVino/Digitanks/blob/master/common/eastl.cpp

https://github.com/electronicarts/EASTL/blob/master/test/source/main.cpp

私はそれをここに含まれます。

// EASTL also wants us to define this (see string.h line 197) 
int Vsnprintf8(char* pDestination, size_t n, const char* pFormat, va_list arguments) 
{ 
    #ifdef _MSC_VER 
     return _vsnprintf(pDestination, n, pFormat, arguments); 
    #else 
     return vsnprintf(pDestination, n, pFormat, arguments); 
    #endif 
} 

int Vsnprintf16(char16_t* pDestination, size_t n, const char16_t* pFormat, va_list arguments) 
{ 
    #ifdef _MSC_VER 
     return _vsnwprintf((wchar_t*)pDestination, n, (wchar_t*)pFormat, arguments); 
    #else 
     char* d = new char[n+1]; 
     int r = vsnprintf(d, n, convertstring<char16_t, char>(pFormat).c_str(), arguments); 
     memcpy(pDestination, convertstring<char, char16_t>(d).c_str(), (n+1)*sizeof(char16_t)); 
     delete[] d; 
     return r; 
    #endif 
} 
+0

しかし、sprintfはそのファイルに対してのみ、リンクエラーを出しています。このファイルのコードを別のファイルに移動すると、すべて正常に動作します。コードはあなたが言及した関数の定義を取得していますが、abc.cppファイルの場合、コンパイルが適切に行われていません。どうして ?それが問題です。私は現在、abc.cppファイルのコードを別のファイルに移動してコードを動作させました。 @marcinj – lsrawat

+0

プロジェクトアプリケーションにVsnprintf16の定義がありますか?または、このxyz.libに存在するかもしれませんか?おそらく、abc.cppにこのdef.cppとは異なる個別の設定/オプションが設定されているかどうかを確認してください。たぶんいくつかの特別なプリプロセッサ定義。 – marcinj

+0

彼はeastlをどのように構築しているかは言及していませんが、彼は 'eastl.cpp'にリンクしていない可能性があります...私はeastlをよく知っていません。しかし、この答えを得るためにあなたによくできました。それはいくつかの研究努力です。 – Niall

関連する問題