我正在尝试在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
请帮助我为什么会出现错误?虽然也创建了目标文件。
答案 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)
在我的例子中,有一个未初始化的静态变量。当我初始化它时,错误被删除。我不知道它背后的逻辑,但为我工作。我知道它有点晚了,但其他有类似问题的人可能会得到一些帮助。