在 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 应用程序

如何在 mac osx 上使用 msg_nosignal

Mac OSX系统LinuxWindows命令行教程

C++:在 mac osx 上使用 std::cout 和 gcc

如何在 linux/Mac OSX 中获取网络适配器统计信息?

如何在 Mac OSX 中获取默认网关