gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:09:09 25 4
gpt4 key购买 nike

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

widgets.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) private: unsigned short const * __cdecl Concurrency::accelerator::_Get_device_path(void)const " (_imp?_Get_device_path@accelerator@Concurrency@@AEBAPEBGXZ) referenced in function "void __cdecl `dynamic initializer for '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 项目中时,也会发生同样的情况。

最佳答案

  __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 视为内置类型必须设置为默认值"is"。

关于c++ - 在 MSVC++ 2012 下使用 C++Amp 将程序与库链接时未解析的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21459032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com