gcc使用的默认C标准是C89,而clang使用的是C99,一般的差异就是这么多,剩下的option和链接问题基本上对照着都有解决方案,最害怕一个人编译用GCC都编译不过的东西让你改换Clang,用nvcc编译不过的CUDA程序也让你换Clang。
我这里使用的LLVM 7.0,所以会提示clang-7,后边意思就是clang-7不支持gcc的-flto=4的option,man gcc查看该option的用法,是一个用于link级别的选项,再man clang就能发现clang在这个选项,要求使用 -flto -O2这种标准的用法,这里编译替换就好: CFLAGS=$(CPPFLAGS) -g -O2 -pthread -fno-strict-aliasing -fno-stri...
gcc使用的默认C标准是C89,而clang使用的是C99,一般的差异就是这么多,剩下的option和链接问题基本上对照着都有解决方案,最害怕一个人编译用GCC都编译不过的东西让你改换Clang,用nvcc编译不过的CUDA程序也让你换Clang。
对于这种类型,⼀般就是⼏条简单的gcc或者g++编译命令,这种project建议完全复制,粘贴时将gcc替换为clang就能解决问题,⼤部分gcc⽀持option,clang都进⾏了⽀持,甚⾄⽀持的更好,⼀般⽤户很少能写出gcc⽀持⽽clang不⽀持的命令 2. 传统configure类型的project 对于这种类型的project,是⽬前...
比如版本,我使用gcc去编译就没有问题,而在使用clang7.0的时候就遇到了avx512指令部分不支持的情况,切换到高版本的clang就得以解决,如果你的项目必须使用低版本的话,就需要对比一下这个地方有哪些功能还没有support,需要人肉去diff和打patch。 这里也介绍一点点经验,确定问题的真正来源,需要从make文件入手。在经历的c...
传统的使用configure生成Makefile文件,然后进行编译的project 大型project,往往使用cmake生成编译脚本,然后编译的project 1. 测试型的project 对于这种类型,一般就是几条简单的gcc或者g++编译命令,这种project建议完全复制,粘贴时将gcc替换为clang就能解决问题,大部分gcc支持option,clang都进行了支持,甚至支持的更好,一般用户...