[英]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.