我正在尝试解决以下问题:我有一个使用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项目时,会发生同样的情况。
答案 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”。