make:*** []错误1错误

时间:2011-04-04 07:10:44

标签: gcc makefile

我正在尝试在gcc上编译Pro * C文件,我收到此错误:

make: *** [MedLib_x.o] Error 1

这是由make:

打印的命令
   /usr/bin/gcc -g -fPIC -m64 -DSS_64BIT_SERVER  -I/home/med/src/common -
I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/demo 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/public 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/xdk/include INCLUDE=/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public -lnapi -ltabs -c MedLib_x.c

请帮助我为什么会出现错误?虽然也创建了目标文件。

4 个答案:

答案 0 :(得分:20)

来自GNU Make错误附录,如您所见,这不是Make错误,而是来自gcc的错误。

  

'[foo]错误NN'   '[foo]信号描述'   这些错误根本不会产生错误。它们意味着作为配方的一部分调用的程序返回非0错误代码('错误NN'),这使得解释为失败,或者以某种其他异常方式退出(具有某种类型的信号)。请参阅食谱中的错误。   如果消息没有附加***,则子进程失败,但makefile中的规则以 - 特殊字符为前缀,因此忽略错误。

因此,为了解决问题,需要来自gcc的错误消息。将Makefile中的命令直接粘贴到命令行,看看gcc说的是什么。 For more details on Make errors click here.

答案 1 :(得分:15)

我得到了同样的东西。运行“make”,只有这条消息就会失败。

% make
make: *** [all] Error 1

这是由规则中的命令以非零退出状态终止而引起的。例如。想象下面的(愚蠢的)Makefile

all:
       @false
       echo "hello"

由于false以退出状态1终止,因此上述消息会失败(不打印“hello”)。

在我的情况下,我试图变聪明并在处理之前备份文件(这样我就可以将新生成的文件与之前的文件进行比较)。我这样做是因为我的Make规则看起来像这样:

@[ -e $@ ] && mv $@ $@.bak

...没有意识到如果目标文件不存在,那么上面的构造将退出(不运行mv命令)退出状态1,因此该规则中的任何后续命令都无法运行。将我的错误行重写为:

@if [ -e $@ ]; then mv $@ $@.bak; fi

解决了我的问题。

答案 2 :(得分:3)

有时你会得到许多带有许多警告且没有线路的编译器输出 输出的说法    "错误:你在这里做错了什么" 但仍然有一个错误。一个例子是缺少头文件 - 编译器说类似于"没有这样的文件"但不是"错误:没有这样的文件",然后它会在一段时间之后以非零退出代码退出(可能在更多警告之后)。在这些情况下,Make会弹出一条错误信息!

答案 3 :(得分:0)

在我的例子中,有一个未初始化的静态变量。当我初始化它时,错误被删除。我不知道它背后的逻辑,但为我工作。我知道它有点晚了,但其他有类似问题的人可能会得到一些帮助。