在 Linux 与 Mac OSX 上使用 clang 编译时间
Posted
技术标签:
【中文标题】在 Linux 与 Mac OSX 上使用 clang 编译时间【英文标题】:Compile time with clang on Linux vs. Mac OSX 【发布时间】:2014-06-24 13:46:09 【问题描述】:我正在使用 C++11、Boost、Qt 和一些较小的库开发一个跨平台项目。
在 Mac OSX 上测试构建我发现,与同一台机器上的 Linux Mint 17 上的 clang 相比,clang 只需要大约 66% 的时间。具有相同设置的基于 Qmake 的调试版本 (-j8)。
版本只是略有不同:
Clang:3.4 提升:1.55.0 Qt:5.3 与 5.2.1在 Linux 上切换到 libc++ 也没有什么不同。
编译时间的巨大差异来自哪里? 我可以在 Linux 上达到同样的速度吗?
【问题讨论】:
clang 本身是如何编译的? 我在 Mac 上使用了 XCode 提供的那个,在 Linux 上使用了来自 repos 的那个,所以对我来说没什么特别的。我猜,他们提供优化版本? 您是在测量 qmake 的运行还是 clang 的运行?你是如何测量的? 只是整体时间,所以time make -j8
【参考方案1】:
Clang 在 OS X 上始终构建为 64 位 AMD64,但可能是 32 位 x86,具体取决于您的 Mint 构建。 64 位与 32 位肯定会对编译器性能产生影响。
【讨论】:
在 Linux Mint 我得到clang --version
: Target: x86_64-pc-linux-gnu
@MikeM 使用file /path/to/clang
查看它构建的架构,而不是它构建的目标。
@MikeM 您也可以尝试从 make 中删除 -j8 以消除操作系统之间进程调度的可能差异。
@***foe 抱歉,我没有看到目标……它是/usr/bin/clang
。 @eightycc 如果我放弃-j8
,是否还有另一种并行编译的可能性?
@MikeM 我认为这正是目标:不并行编译。正如八十年代所说,这消除了操作系统可能的调度差异。但是还有很多与操作系统相关的其他可能原因(例如内存管理,如果您的代码大到需要大量内存)。如果你不是很幸运,我认为很难确定确切的原因。以上是关于在 Linux 与 Mac OSX 上使用 clang 编译时间的主要内容,如果未能解决你的问题,请参考以下文章
在 Mac OS X 上使用 Eclipse CDT 调试远程 Linux 应用程序
C++:在 mac osx 上使用 std::cout 和 gcc