VS2022使用Clang链接libcpmt时出现PDB相关链接错误
问题描述
在项目中使用Visual Studio 2022搭配Clang工具链时持续出现链接错误。相同操作在VS2019环境下搭配Clang可正常执行,且已确认VS2022的Clang工具链安装状态正常:使用该工具链可以顺利创建并编译全新的控制台项目。已尝试将大部分项目配置还原为与空白控制台项目一致的参数,但问题始终存在,需要定位触发问题的具体配置项。
运行环境
- Windows 10(版本号10.0.19041.0)
- Visual Studio Community 2022(64位)17.2.4版本,配套Clang 13.0.1
- 同设备同时安装Visual Studio Community 2019,配套Clang 12.0.0
复现步骤
- 获取NetImgui仓库Dev分支代码
- 运行
GenerateProjects.bat生成解决方案,该脚本基于Ubisoft Sharpmake生成项目文件 - 在已安装Clang工具链的VS2022中打开
_Projects\vs2022_netImgui_All.sln解决方案 - 选择Clang_Debug配置、x64目标平台,编译
Samples\SampleBasic项目 - 编译阶段触发链接错误
链接错误日志
3>------ Build started: Project: SampleBasic, Configuration: Clang_Debug x64 ------ 3>lld-link : error : procedure symbol record for `std::_Load_barrier` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\xtime.obj refers to PDB item index 0x1291 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::_Container_base12::_Container_base12` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x1338 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::_Container_proxy::_Container_proxy` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x1335 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::bad_alloc::bad_alloc` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x12A7 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::bad_array_new_length::bad_array_new_length` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x12B5 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::bad_array_new_length::bad_array_new_length` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x12AA which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::error_code::error_code` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x136B which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::error_condition::error_condition` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x136F which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::runtime_error::runtime_error` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x1358 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::_System_error::~_System_error` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x137D which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::bad_alloc::~bad_alloc` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x12A9 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::error_category::~error_category` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x1369 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::_System_error::`scalar deleting destructor'` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x137C which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::bad_alloc::`scalar deleting destructor'` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x12A8 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::exception::`scalar deleting destructor'` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x12A4 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::_Adjust_manually_vector_aligned` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x1334 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::_System_error::_Makestr` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x1379 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::_Container_base12::_Orphan_all_locked_v3` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x1336 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::_Container_base12::_Swap_proxy_and_iterators_locked` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x1337 which is not a valid function ID record 3>lld-link : error : procedure symbol record for `std::error_code::category` in D:\a\_work\1\s\Intermediate\vctools\libcpmt.nativeproj_658832323\objd\amd64\thread0.obj refers to PDB item index 0x136D which is not a valid function ID record 3>lld-link : error : too many errors emitted, stopping now (use /errorlimit:0 to see all errors) 3>Done building project "SampleBasic.vcxproj" -- FAILED. ========== Build: 2 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
内容的提问来源于stack exchange,提问作者Aion
相关产品推荐
相关产品推荐

