我将服务器升级到FreeBSD-10 / gcc48,我的项目使用ar将子项目放入静态库,现在慢慢链接 。
10.0-RELEASE-p4 FreeBSD 10.0-RELEASE-p4 #0: Tue Jun 3 13:14:57 UTC 2014 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64
使用不同的ar标志:
“time ar -v -c -u -q ...”:362.62 real 0.11 user 0.82 sys
“time ar v -c -r -u -s ...”:407.94 real 0.13 user 0.80 sys
这必须比以前慢十倍(FreeBSD-8,库存GCC编译器)。我该怎么做才能改善这一点? GNU Libtool只是在幕后使用ar(所以没有帮助),对吧?我应该完全绕过静态库吗? (但是不会建立一个.so同时?)不用说,这会导致我的开发周期时间缩短。
答案 0 :(得分:2)
此问题是由ar(1)的I / O访问模式与内核UFS死锁避免代码交互引起的,并在FreeBSD r284298中得到修复。这将在2015年7月中旬的FreeBSD-CURRENT快照版本中提供,并且应该为FreeBSD 10.2向后移植。
答案 1 :(得分:0)
无法解决ar
并且没有看到任何其他内容,我构建了一个足够大的RAM磁盘来保存我最大的ar
输出文件,然后将我的构建入侵到输出{{1}在那里,然后ar
文件到原始目的地。
这解决了性能问题,并且是一个非常独立的解决方案,但您可以想象一下这些警告。 (创建RAM磁盘需要root访问权限,保存暂时只需要的资源,不能很好地扩展多个任务等。)