qicosmos / iguana

universal serialization engine
Apache License 2.0
1.11k stars 226 forks source link

VS 2019编译不成功 #177

Open jackgoodman2 opened 1 year ago

jackgoodman2 commented 1 year ago

安装源设计的cmake文件生成的VS项目在2019版本中无法注册为c++20,编译的时候出现诸多错误。 自己在cmakelist中配置为set c++ 20后,对于例子项目出现编译器内部错误提示,始终无法通过编译,不知是因为只兼容Linux系统么

jackgoodman2 commented 1 year ago

已启动生成… 1>------ 已启动生成: 项目: ZERO_CHECK, 配置: Debug x64 ------ 1>Checking Build System 2>------ 已启动生成: 项目: benchmark, 配置: Debug x64 ------ 3>------ 已启动生成: 项目: example, 配置: Debug x64 ------ 4>------ 已启动生成: 项目: json_example, 配置: Debug x64 ------ 5>------ 已启动生成: 项目: test_json_files, 配置: Debug x64 ------ 6>------ 已启动生成: 项目: test_some, 配置: Debug x64 ------ 7>------ 已启动生成: 项目: test_ut, 配置: Debug x64 ------ 8>------ 已启动生成: 项目: test_xml, 配置: Debug x64 ------ 9>------ 已启动生成: 项目: test_yaml, 配置: Debug x64 ------ 2>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 3>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 5>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 4>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 2>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 2>benchmark.cpp 6>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 7>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 4>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 5>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 6>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 3>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 8>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 2>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 5>test_json_files.cpp 3>example.cpp 4>json_example.cpp 6>test.cpp 3>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 9>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 4>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 7>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 7>unit_test.cpp 8>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 8>test_xml.cpp 7>C:\Users\Dreamer\Desktop\iguana-master\test\unit_test.cpp(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 9>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 9>test_yaml.cpp 2>C:\Users\Dreamer\Desktop\iguana-master\iguana\json_util.hpp(196,56): fatal error C1001: 内部编译器错误。 2>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 2> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 2>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 2>请选择 Visual C++ 2>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 3>C:\Users\Dreamer\Desktop\iguana-master\iguana\json_util.hpp(196,56): fatal error C1001: 内部编译器错误。 3>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 3> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 3>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 3>请选择 Visual C++ 3>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 6>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 5>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 4>C:\Users\Dreamer\Desktop\iguana-master\iguana\json_util.hpp(196,56): fatal error C1001: 内部编译器错误。 4>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 4> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 4>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 4>请选择 Visual C++ 4>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 2>已完成生成项目“benchmark.vcxproj”的操作 - 失败。 3>已完成生成项目“example.vcxproj”的操作 - 失败。 10>------ 已启动生成: 项目: xml_benchmark, 配置: Debug x64 ------ 11>------ 已启动生成: 项目: xml_example, 配置: Debug x64 ------ 4>已完成生成项目“json_example.vcxproj”的操作 - 失败。 12>------ 已启动生成: 项目: yaml_benchmark, 配置: Debug x64 ------ 5>C:\Users\Dreamer\Desktop\iguana-master\iguana\json_util.hpp(196,56): fatal error C1001: 内部编译器错误。 5>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 5> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 5>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 5>请选择 Visual C++ 5>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 7>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 10>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 8>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 12>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 9>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 5>已完成生成项目“test_json_files.vcxproj”的操作 - 失败。 13>------ 已启动生成: 项目: yaml_example, 配置: Debug x64 ------ 10>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 10>xml_benchmark.cpp 12>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 12>yaml_benchmark.cpp 6>C:\Users\Dreamer\Desktop\iguana-master\iguana\json_util.hpp(196,56): fatal error C1001: 内部编译器错误。 6>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 6> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 6>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 6>请选择 Visual C++ 6>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 7>C:\Users\Dreamer\Desktop\iguana-master\iguana\json_util.hpp(196,56): fatal error C1001: 内部编译器错误。 7>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 7> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 7>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 7>请选择 Visual C++ 7>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 7>已完成生成项目“test_ut.vcxproj”的操作 - 失败。 12>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 13>Building Custom Rule C:/Users/Dreamer/Desktop/iguana-master/CMakeLists.txt 6>已完成生成项目“test_some.vcxproj”的操作 - 失败。 9>C:\Users\Dreamer\Desktop\iguana-master\iguana\yaml_util.hpp(117,61): fatal error C1001: 内部编译器错误。 9>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 9> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 9>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 9>请选择 Visual C++ 9>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 9>test_yaml_bech.cpp 13>cl : 命令行 warning D9002: 忽略未知选项“/std:c++20” 13>yaml_example.cpp 9>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 13>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 10>C:\Users\Dreamer\Desktop\iguana-master\iguana\detail\fast_float.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 12>C:\Users\Dreamer\Desktop\iguana-master\iguana\yaml_util.hpp(117,61): fatal error C1001: 内部编译器错误。 12>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 12> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 12>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 12>请选择 Visual C++ 12>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 12>已完成生成项目“yaml_benchmark.vcxproj”的操作 - 失败。 9>C:\Users\Dreamer\Desktop\iguana-master\iguana\yaml_util.hpp(117,61): fatal error C1001: 内部编译器错误。 9>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 9> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 9>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 9>请选择 Visual C++ 9>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 9>正在生成代码... 13>C:\Users\Dreamer\Desktop\iguana-master\iguana\yaml_util.hpp(117,61): fatal error C1001: 内部编译器错误。 13>(编译器文件“D:\a01_work\26\s\src\vctools\Compiler\CxxFE\sl\p1\c\template.cpp”,第 29342 行) 9>已完成生成项目“test_yaml.vcxproj”的操作 - 失败。 13> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 13>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com 13>请选择 Visual C++ 13>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 13>已完成生成项目“yaml_example.vcxproj”的操作 - 失败。 8>test_xml.vcxproj -> C:\Users\Dreamer\Desktop\iguana-master\build\Debug\test_xml.exe 8>已完成生成项目“test_xml.vcxproj”的操作。 10>xml_benchmark.vcxproj -> C:\Users\Dreamer\Desktop\iguana-master\build\Debug\xml_benchmark.exe 10>已完成生成项目“xml_benchmark.vcxproj”的操作。 14>------ 已跳过生成: 项目: ALL_BUILD, 配置: Debug x64 ------ 14>没有为此解决方案配置选中要生成的项目 ========== 生成: 成功 4 个,失败 9 个,最新 0 个,跳过 1 个 ==========

jackgoodman2 commented 1 year ago

目测错误定位在内联函数 IGUANA_INLINE void skip_comment(auto &&it, auto &&end)上

qicosmos commented 1 year ago

你可以试一下vs2022 有没有问题,不确定vs2019 是否完整的支持了C++20.

jackgoodman2 commented 1 year ago

您好,非常感谢您的回复,按照您的提示我更新VS2019 SDK 到20348, 可以全面支持c++20了,编译没有出错,例子也能顺利运行,非常感谢帮助。 针对这个库,我有几个技术性问题请教: 1、在结构体定义后REFLECTION的时候能否跳过结构体内某些变量,比如我知道iguana不支持指针,我某些结构体里面有vector这种结构,能否跳过这些变量或者说只能手动的强制转换后再序列化? 2、该库支持类变量导出么,类变量是否必须要public?

bbbgan commented 1 year ago

1、在结构体定义后REFLECTION的时候能否跳过结构体内某些变量,比如我知道iguana不支持指针,我某些结构体里面有vector这种结构,能否跳过这些变量或者说只能手动的强制转换后再序列化?

是可以跳过结构体的一些变量的,只要不反射他们就行了。

2、该库支持类变量导出么,类变量是否必须要public?

是的,类变量必须是public。

jackgoodman2 commented 1 year ago

请问出现这种错误是因为有不支持的类型么?iguana/json_writer.hpp(53,15): error C2228: “.data”的左边必须有类/结构/联合

bbbgan commented 1 year ago

应该不是,如果是不支持的类型的话一般是报错找不到函数,能提供更具体的信息吗?

jackgoodman2 commented 1 year ago

您好,是几个char字符串的问题,貌似这个库是不是不支持char tag[]这样的类型? 另外,能方便加个联系方式吗? 感谢

bbbgan commented 1 year ago

有群的,README里面有 701594518

LinkCode7 commented 1 year ago

请留意最后报错的文件位置,细读每个单词,因为可能是你本地的宏替换了标准库里面的函数名