在Mac上构建通用二进制文件 - 强制单个编译器子进程

时间:2009-10-08 10:20:49

标签: python macos gcc multicore

干杯,

在公司,我们正在创建游戏的端口,我们需要编译PythonOgre,这是Python的Ogre3d包装器。这是一大块代码,特别是生成的包装器代码。我们有一台配备1GB RAM的Mac Mini。

我们已经构建了i386版本。由于我们只有1GB的RAM,因此我们强制构建系统只使用一个内核;第二个进程同时运行,进入了虚拟内存。

现在,我们需要生成通用二进制文件,因为发布者坚持支持PPC。为了便于构建通用二进制文件,我们在编译包装器代码时修改了CFLAGSCXXFLAGS以包含-arch i386 -arch ppc(Ogre3d本身似乎已经是通用二进制文件)。

但是,Apple在创建通用二进制文件时决定使用这两个内核,这导致系统翻转并死亡。 (好吧,无论如何,爬行的CPU使用率为0.9-1.4%。)虽然我们很欣赏这一点,但在1GB Mac Mini上,这完全阻碍了我们的开发。

除了获得新的构建机器,放弃PPC支持并生成仅PPC构建之外,我们唯一的办法是阻止GCC产生第二个同步过程。

我们将如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我已经检查了Apple的GCC驱动程序的源代码(支持那些-arch选项并运行子进程的驱动程序),并且没有可供选择的选项或环境变量。

我看到的唯一选择是:

  • 下载Apple驱动程序(例如从there;页面末尾)并修改文件driverdriver.c,以便按顺序(而不是并行)启动进程
  • 分开i386和powerpc构建,并使用lipo
  • 加入最终构建对象(可执行文件,共享库等)

我希望这有帮助!

答案 1 :(得分:1)

刚关闭一个核心吗?显然,安装Apple Developer Tools(XCode等)会为您提供一个处理器系统首选项窗格,允许您关闭一个核心。我试图测试这个,但XCode安装失败了......

编辑:我知道这是不久前的,但我只想到了一些东西。为什么不单独使用-march = i386和-march = ppc构建,然后使用lipo组合二进制文件?