MFC/DLL中缺少ATL :: CSTRINGT功能,该功能与Clang/vs-2019构建
Missing ATL::CStringT function in MFC/DLL Builds with Clang/VS-2019
最近在Visual Studio 2019中安装了新的LLVM/Clang-Cl工具集,这是一个潜在的出色添加!但是,当构建我的EXE和DLL文件时,我会在链接时间收到以下错误:
lld-link : error : undefined symbol: "__declspec(dllimport) public: static void __cdecl ATL::CSimpleStringT<wchar_t, 1>::CopyChars(wchar_t *, unsigned __int64, wchar_t const *, int)" (__imp_?CopyChars@?$CSimpleStringT@_W$00@ATL@@SAXPEA_W_KPEB_WH@Z)
仅在共享DLL中使用MFC构建时才发生。并在"释放"中配置:即,在静态库中使用MFC。或"调试"配置,错误消失了。
使用_atl_insecure_deprecate(" blah blah blah blah&quort"(属性在cstringt.h标题中定义了'有问题的功能,但是将其重新定义为"空"并不能解决问题。
要复制,在VS-2019中使用新项目向导创建一个默认的MFC,基于对话框的应用程序,然后在OnInitDialog((函数中添加以下内容:
// TODO: Add extra initialization here
CString txt1 = L"Hello, ";
CString txt2 = L"world!";
CString mess = txt1 + txt2;
SetDlgItemText(IDC_STATIC, mess);
构建为默认检查,然后切换"平台工具集"。到" llvm(clang-cl("重建!您需要在生成的"框架"末尾发表或禁用与明显相关的线路。文件:
#ifndef __clang__
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'"")
#else
#pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"")
#endif
#endif
#endif
我已经尝试了以下#Defines在我的全球标题中,但无济于事:
#define _CRT_SECURE_NO_DEPRECATE
#define _SECURE_ATL 0
#define _SECURE_SCL 0
#define _ATL_INSECURE_DEPRECATE(a)
#define _ATL_DEBUG_INTERFACES
so:(1(这是我应该向微软报告的"错误"还是我在做愚蠢的事情?(2(任何人都可以建议一个补丁/修复程序,以便我真正可以用Clang测试我的MFC项目吗?注意:当我依靠扩展DLL时,我必须在DLL中使用MFC。
aha!我有一个可行的修复程序(目前(,但依赖于我构建的EXES都称为常见的DLL,我也构建了这一事实。我将此代码添加到该DLL的来源,现在它们构建和运行!
template<> void __declspec(dllexport) __cdecl ATL::CSimpleStringT<wchar_t,1>::CopyChars(wchar_t *pchDest, size_t, const
wchar_t *pchSrc, int nChars) throw()
{
memcpy(pchDest, pchSrc, size_t(nChars) * sizeof(wchar_t));
return;
}
但是,这取决于我称之为dll的事实。对于其他没有的应用程序,我还无法((都能获得这种工作方法。另外,我的" MFC扩展DLL"似乎不喜欢它:它们是可选的'插件'模块,但在我尝试加载一个模块时,只会导致完整的出口/崩溃 - 但这可能是由许多其他的导致因素,因为这使用了真正深/微妙的MFC东西。
我遇到了同一问题,发现项目配置中的内联函数扩展(/ob0(解决了问题。您是否碰巧启用了它(/ob1或/ob2(?
- Clang(MacOS 32/64):在某些功能中禁用堆栈帧
- MFC/DLL中缺少ATL :: CSTRINGT功能,该功能与Clang/vs-2019构建
- 使用clang获取功能定义
- 这是 clang c++11 std::regex_match 的功能还是错误?
- G 和Clang 不同的行为,指向Variadic模板功能的指针
- 如何求解与GCC/Clang不同的C 功能模板的MSVC处理(无法识别的模板定义)
- GCC称将功能与多个继承过载时,称其为模棱两可,但Clang和MSVC没有
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- 为什么Clang自动将属性添加到我的功能中
- 当我尝试使用 AVX 功能时,Clang 会生成错误
- Clang-Linux:报告CFI错误而不会崩溃.ftrap功能和-O2
- Clang无法在模板类专业化中编译模板功能,该模板类专业化与模板声明具有 *不同的返回类型 *
- GCC vs Clang:将功能与-FPIC一起插入
- 一个人可以使用clang ast使用名称打印功能指针的质量
- 获取具有AST访问者clang的功能声明类型
- ConstexPR静态模板功能:G 错误是Clang上的警告
- 如何检索类:用clang功能
- Clang LLVM为JIT编译功能提供了不良功能指针
- GMP内存管理功能出现Clang错误
- Clang看不到strdup和其他一些功能