为什么'make'在Lion上失败了?

时间:2011-11-15 10:07:33

标签: makefile osx-lion

我正在使用make在OSX Lion上构建一个大型项目。这些脚本在OSX上运行得很好,直到Snow Leopard,但现在它失败了。

在构建某些模块后,会出现类似于以下内容的错误:

touch my.app/Contents/Resources
touch my.app
make[2]: write error
make[1]: *** [all] Error 1
make: *** [all] Error 1

如果我再次输入make,它会从失败的位置恢复并成功构建(直到遇到另一个此类错误)。它总是发生在项目的两个模块中,我不能为我的生活找出原因。

如果我能提供更多有用的信息,请告诉我。

第一次更新

以下是make -d的输出:

...
     Finished prerequisites of target file `DesktopConn.o'.
     Prerequisite `DesktopConn.cxx' is older than target `DesktopConn.o'.
    No need to remake target `DesktopConn.o'.
    Considering target file `List.o'.
     Looking for an implicit rule for `List.o'.
     Trying pattern rule with stem `List'.
     Trying implicit prerequisite `/bin/sh: line 1:  6733 Segmentation fault: 11  make all
Reaping losing child 0x102d0ae70 PID 6471 
make[1]: *** [all] Error 1
Removing child 0x102d0ae70 PID 6471 from chain.
Reaping losing child 0x10560ee20 PID 6342 
make: *** [all] Error 1
Removing child 0x10560ee20 PID 6342 from chain.

我已将整个make -d输出(非常详细)放在pastebin上。

第二次更新

I've uploaded the Makefile too

第3次更新

我已经下载了make的源码,它是从我的机器上的源代码构建的。它仍然在同一点失败。我也尝试过使用Snow Leopard的make二进制文件。

2 个答案:

答案 0 :(得分:1)

尝试以面值观察SEGV。 make要么取消引用越界指针,要么试图将内存写入某个超出范围的位置,或者它试图将堆栈扩展到进程堆栈大小限制之外。没有调试GNU make,你无法对前两个做什么,但你可以增加堆栈限制。使用bash:

ulimit -s hard

将软限制提升到硬限制,为您提供尽可能多的堆栈空间。试一试,看看make是否可以在不崩溃的情况下运行完毕。

答案 1 :(得分:0)

llvm是Lion中的默认编译器,我相信,但不是你提到的以前的版本。 Occam的剃刀说使用:

CC=gcc make

编辑: 发现这个,我认为是相关的。请参阅答案#1,3编辑:here。它指的是构建Ruby,但我认为潜在的问题是相同的。如果出现问题,您可能需要下载不同版本的GCC。