我正在使用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
我已经下载了make的源码,它是从我的机器上的源代码构建的。它仍然在同一点失败。我也尝试过使用Snow Leopard的make二进制文件。
答案 0 :(得分:1)
尝试以面值观察SEGV。 make要么取消引用越界指针,要么试图将内存写入某个超出范围的位置,或者它试图将堆栈扩展到进程堆栈大小限制之外。没有调试GNU make,你无法对前两个做什么,但你可以增加堆栈限制。使用bash:
ulimit -s hard
将软限制提升到硬限制,为您提供尽可能多的堆栈空间。试一试,看看make是否可以在不崩溃的情况下运行完毕。
答案 1 :(得分:0)
llvm是Lion中的默认编译器,我相信,但不是你提到的以前的版本。 Occam的剃刀说使用:
CC=gcc make
编辑: 发现这个,我认为是相关的。请参阅答案#1,3编辑:here。它指的是构建Ruby,但我认为潜在的问题是相同的。如果出现问题,您可能需要下载不同版本的GCC。