我试图在gcc上编译Pro*C文件,我收到此错误:
make: *** [MedLib_x.o] Error 1
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
请帮助我为什么会出现错误?虽然也创建了目标文件.
fno*_*kke 22
从GNU Make错误附录,如您所见,这不是Make错误,而是来自gcc的错误.
'[foo]错误NN''[foo]信号描述'这些错误根本不是真正的错误.它们意味着作为配方的一部分调用的程序返回非0错误代码('错误NN'),这使得解释为失败,或者以某种其他异常方式退出(具有某种类型的信号).请参阅食谱中的错误.如果消息没有附加***,则子进程失败,但makefile中的规则以 - 特殊字符为前缀,因此忽略错误.
因此,为了解决问题,需要来自gcc的错误消息.将Makefile中的命令直接粘贴到命令行,看看gcc说的是什么.有关Make errors的更多详细信息,请单击此处.
zra*_*ajm 16
我有同样的事情.运行"make",只有这条消息才会失败.
% make
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud)
这是由规则中的命令以非零退出状态终止而引起的.想象一下以下(愚蠢)Makefile
:
all:
@false
echo "hello"
Run Code Online (Sandbox Code Playgroud)
这将失败(没有打印"hello")上面的消息,因为false
终止退出状态1.
在我的情况下,我试图聪明并在处理之前备份文件(这样我就可以将新生成的文件与我之前的文件进行比较).我这样做是因为我的Make
规则看起来像这样:
@[ -e $@ ] && mv $@ $@.bak
Run Code Online (Sandbox Code Playgroud)
...没有意识到如果目标文件不存在,那么上述构造将退出(不运行mv
命令)退出状态1,因此该规则中的任何后续命令都无法运行.将我的错误行重写为:
@if [ -e $@ ]; then mv $@ $@.bak; fi
Run Code Online (Sandbox Code Playgroud)
解决了我的问题.
归档时间: |
|
查看次数: |
157773 次 |
最近记录: |