繁体   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