在MSVC ++ 2012下使用C ++ Amp将程序与库链接时未解析的符号

时间:2014-01-30 14:23:04

标签: c++ qt visual-c++ linker c++-amp

我正在尝试解决以下问题:我有一个使用C ++ Amp的库。图书馆编译时没有任何警告,单元测试表明一切正常。我有一个基于QT的项目,它是这个库的GUI,这里的问题就开始了。每次我编译GUI时,在链接阶段都会出现以下错误:

  

widgets.obj:错误LNK2019:未解析的外部符号“__declspec(dllimport)private:unsigned short const * __cdecl Concurrency :: accelerator :: _ Get_device_path(void)const”(_ imp ?_ Get_device_path @加速器@ Concurrency @@ AEBAPEBGXZ)在函数“void __cdecl”动态初始化器中引用'public:static class std :: _ Future_error_category std :: _ Future_error_object :: _ Future_object''(void)“(?? __ E?_Future_object @?$ _ Future_error_object @ H @ std @@ 2V_Future_error_category @ 2 @ A @@ YAXXZ)

库链接到lib文件,而不是dll。

同样的故事也适用于项目中的其他目标文件。在使用C ++ Amp时,是否有人在链接阶段遇到类似的问题。我确信这是一个非常简单的问题需要解决,但目前我不知道如何做到这一点。提前致谢。

更新:当我尝试在MSVC ++中包含QT项目时,会发生同样的情况。

1 个答案:

答案 0 :(得分:2)

  __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*。您的编译器设置有误。 Project + Properties,C / C ++,Language,Treat WChar_t As Built in Type必须设置为默认值“Yes”。