本文最后更新于:2024年12月15日 下午
VS 再次打开CMake项目时无法识别
尝试清理缓存,然后重新生成
cmake文件跨平台,程序计算结果不同
我使用Visual Studio创建了一个CMake项目,能成功运行。然而我移植到在Linux上用cmake编译、运行时,程序得到的计算结果却不同。
查看log发现,应该是 abs() max()函数定义问题,自己定义abs_() max_() 后,问题解决。
GPT的回答:
-
编译器差异:不同的操作系统和编译器可能对代码的处理方式存在差异,特别是在涉及浮点数运算和优化方面。这可能导致在不同平台上得到不同的计算结果。你可以尝试在Linux上使用与Visual Studio中相同的编译器(例如GCC)来编译代码,以确保结果的一致性。
-
依赖项问题:你的项目可能依赖于特定的库或组件,而在Linux上可能缺少这些依赖项或使用了不同的版本。这可能会导致在不同平台上产生不同的结果。确保在Linux上安装和配置了与Visual Studio相同的依赖项版本,并且在CMakeLists.txt文件中正确设置了这些依赖项。
-
CMake配置问题:CMakeLists.txt文件可能在不同平台上有所不同,特别是与编译选项、链接库和宏定义相关的部分。确保在Linux上正确配置了CMakeLists.txt,以便与Visual Studio中的配置保持一致。
-
平台相关行为:某些代码可能依赖于特定平台的行为,而在不同平台上可能表现不同。这可能涉及文件路径、操作系统相关的特性、并发行为等。确保你的代码在移植到Linux时考虑了这些平台相关的差异,并进行了适当的调整。
这是windows前18步文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| istep = 0 time = 0.0104167 dvormax/dt = 8640 dstrmax/dt = 0 calcutate time: 0.005s istep = 1 time = 0.0208333 dvormax/dt = 2671.78 dstrmax/dt = 9.18258e-07 calcutate time: 0.007s istep = 2 time = 0.03125 dvormax/dt = 1541.5 dstrmax/dt = 9.44346e-07 calcutate time: 0.014s ... istep = 17 time = 0.1875 dvormax/dt = 37.8238 dstrmax/dt = 9.18957e-07 calcutate time: 0.042s istep = 18 time = 0.197917 dvormax/dt = 34.7246 dstrmax/dt = 8.76593e-07 calcutate time: 0.044s
|
这是linux文件。它把残差整数化了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| istep = 0 time = 0.0104167 dvormax/dt = 8640 dstrmax/dt = 0 calcutate time: 0.000465s istep = 1 time = 0.0208333 dvormax/dt = 2400 dstrmax/dt = 0 calcutate time: 0.000647s istep = 2 time = 0.03125 dvormax/dt = 1824 dstrmax/dt = 0 calcutate time: 0.002803s istep = 3 time = 0.0416667 dvormax/dt = 1536 dstrmax/dt = 0 calcutate time: 0.002997s ... istep = 17 time = 0.1875 dvormax/dt = 96 dstrmax/dt = 0 calcutate time: 0.005587s istep = 18 time = 0.197917 dvormax/dt = 0 dstrmax/dt = 0 calcutate time: 0.00577s istep = 18 time = 0.197917 dvormax/dt = 0 dstrmax/dt = 0 calcutate time: 0.005823s
|