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

C++ 使用C+将程序与库链接时未解析的符号+;MSVC下的Amp++;2012,c++,qt,visual-c++,linker,c++-amp,C++,Qt,Visual C++,Linker,C++ Amp,我试图解决以下问题:我有一个使用C++Amp的库。库编译时没有任何警告,单元测试表明一切正常。我有一个基于QT的项目,它是这个库的GUI,问题就从这里开始。每次我编译GUI时,在链接阶段会出现以下错误: widgets.obj:错误LNK2019:未解析的外部符号“\u declspec(dllimport)private:未签名的短常量*\u cdecl并发::加速器::\u获取设备\u路径(void)常量”(\u imp?\u获取设备_path@accelerator@并发性@@AEBAPE

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

widgets.obj:错误LNK2019:未解析的外部符号“\u declspec(dllimport)private:未签名的短常量*\u cdecl并发::加速器::\u获取设备\u路径(void)常量”(\u imp?\u获取设备_path@accelerator@并发性@@AEBAPEBGXZ)在函数中引用“void\u cdecl`dynamic initializer for'public:静态类标准::\u Future\u error\u类别标准::\u Future\u error\u对象::\u Future\u对象“”(void)”(?\u E\u Future\u object@$\u Future\u error_object@H@std@@2V\u未来\u错误_category@2@A@@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\u t*
。编译器设置错误。Project+属性、C/C++、语言、视wchar\u t为内置类型必须设置为默认值“是”“

我假设你得到了一大堆这些?看起来你没有将AMP二进制文件链接到你的QT项目中。是的,我得到了很多。实际上,我有一个静态库项目(ccilib),它是一个静态库(lib文件),当我试图运行与cci项目链接的QT项目(GUI)时,就会出现问题。我应该如何链接AMP二进制文件?您的编译器设置错误。只有将C/C++语言作为内置类型重新设置为默认类型,才能链接代码。您需要在所有编译的代码(包括Qt)中一致地使用此设置。我应该如何为Qt更改它?重新编译?我像你说的那样设置了它,但它仍然不起作用。我已经尝试过了,但是在设置它时,我似乎遇到了一些其他的QT错误。这是我得到的错误:
错误C2664:'QString::fromUtf16':无法将参数1从'const wchar_t[10]'转换为'const ushort*'2>指向的类型不相关;转换需要重新解释转换、C样式转换或函数样式转换
错误与这行代码有关:
QMessageBox::information(this,QString::fromUtf16(title),QString::fromUtf16(msg))让我再看一次。您需要回顾您的步骤,找出更改默认值的原因。必须重建Qt库可能是必要的,正态分布正确地实现了这一点,因此您可能已经重建了Qt库,但却弄错了。如果您不修复它,这将继续造成伤害,wchar\u t在Windows上是一个大问题。不幸的是,将
视wchar\u t为内置类型
设置为“是”不起作用。我仍然得到相同的链接错误。