我試圖將非Qt靜態庫鏈接到基於Qt的應用程序(它的Visual Studio項目)。
問題是,靜態庫有一些API將指向TCHAR字符串的指針作爲其中一個輸入。 當我嘗試構建項目時,出現鏈接錯誤,抱怨TCHAR。從Qt應用程序鏈接到C++靜態庫
頁眉
class Test
{
public:
static bool TestFunc(TCHAR *empty);
};
來源
bool Test::TestFunc(TCHAR *empty)
{
return true;
}
錯誤:
error LNK2019: unresolved external symbol "public: static bool __cdecl Test::TestFunc(unsigned short *)" ([email protected]@@[email protected]) referenced in function "public: __thiscall TestApp::TestApp(class QWidget *,class QFlags<enum Qt::WindowType>)" ([email protected]@[email protected]@@[email protected]@[email protected]@@@@Z)
有趣的是,如果我在頭文件中的函數實現,它工作正常。或者,如果我將TCHAR更改爲常規字符並保持聲明/定義分開,它也可以工作(使用wchar_t直接失敗並具有相同的鏈接錯誤)。
有誰知道什麼可能導致這個問題,以及如何解決它?
由於提前,
嗨馬克,我確實在每個項目中將「字符集」屬性設置爲「使用Unicode」,並且在每個項目中,TCHAR被定義爲wchar_t。令人費解的是,我不確定爲什麼如果在頭文件中定義了定義,而不是在源文件中定義它,它會起作用。 – SL001
@ SL001,如果在頭文件中有定義,鏈接器不需要嘗試在庫中找到它;這根本就不是神祕的。必須有某些東西阻止函數定義在庫中導出。 –