簡體   English   中英

在MSVC ++ 2012下使用C ++ Amp將程序與庫鏈接到程序時出現無法解析的符號

[英]Unresolved symbols when linking a program with a library using C++Amp under MSVC++ 2012

我正在嘗試解決以下問題:我有一個使用C ++ Amp的庫。 該庫編譯時沒有任何警告,並且單元測試表明一切正常。 我有一個基於QT的項目,該項目是該庫的GUI,問題從這里開始。 每次我編譯GUI時,在鏈接階段都會出現以下錯誤:

widgets.obj:錯誤LNK2019:未解析的外部符號“ __declspec(dllimport)私有:unsigned short const * __cdecl Concurrency :: accelerator :: _ Get_device_path(void)const”(_ imp ?_Get_device_path @ accelerator @ Concurrency @@ AEBAPEBGXZ)在函數中引用“ void __cdecl`動態初始化程序,用於'public:靜態類std :: _ Future_error_category std :: __ Future_error_object :: _ Future_object“(無效)”(?? __ E?_Future_object @?$ _ Future_error_object @ H @ std @@ 2V_Future_error_category @@ YAXXZ)

該庫鏈接到lib文件,而不是dll。

項目中的其他目標文件也是如此。 在使用C ++ Amp的鏈接階段,是否有人有類似的問題。 我確信這是一個非常簡單的問題,但目前我還不知道該怎么做。 提前致謝。

更新 :當我嘗試將其包含在MSVC ++中的QT項目中時,也會發生同樣的情況。

  __imp_?_Get_device_path@accelerator@Concurrency@@AEBAPEBGXZ

在該字符串上運行undname.exe實用程序以取消破壞名稱,我得到:

  declspec(dllimport) private: 
  unsigned short const * __ptr64 
  __cdecl Concurrency::accelerator::_Get_device_path(void)const __ptr64

所以它是64位代碼。 在vc / lib / amd64 / vcamp.lib中尋找最接近的匹配項,我發現:

 ?_Get_device_path@accelerator@Concurrency@@AEBAPEB_WXZ

哪個與undname.exe分解為:

 private: 
 wchar_t const * __ptr64 
 __cdecl Concurrency::accelerator::_Get_device_path(void)const __ptr64

請注意差異。 您的函數已編譯為返回unsigned short* ,庫函數返回wchar_t* 您的編譯器設置錯誤。 項目+屬性,C / C ++,語言,將WChar_t視為內置類型必須設置為默認值“是”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM