报错err.c 的部分:
#include
#include
#include
#include
#include
#include
/* [2] begin */
#include
FILE *gfp_out = stdout; 这句报错
/* [2] end */
make -f arch.mk的结果如下:
[Linux:/home/eam/src/arch]make -f arch.mk
/usr/bin/cc -c -g -I. -DARCH_DEBUG -I/home/eam/include/arch -I/home/eam/include/arch -o /home/eam/lib/err.o err.c
err.c:45: error: initializer element is not constant
err.c:48:25: error: sys/varargs.h: No such file or directory
err.c: In function ??rr_set_info??
err.c:147: error: invalid use of void expression
err.c:147: warning: second parameter of ??a_start??not last named argument
err.c: In function ??rr_append_info??
err.c:224: error: invalid use of void expression
err.c:224: warning: second parameter of ??a_start??not last named argument
err.c: At top level:
err.c:683: error: static declaration of ??et_std_msg??follows non-static declaration
err.c:312: error: previous implicit declaration of ??et_std_msg??was here
err.c:747: error: static declaration of ??et_hdl_sug??follows non-static declaration
err.c:604: error: previous implicit declaration of ??et_hdl_sug??was here
err.c:821: error: static declaration of ??oad_std_msg_file??follows non-static declaration
err.c:701: error: previous implicit declaration of ??oad_std_msg_file??was here
err.c:970: error: static declaration of ??oad_hdl_sug_file??follows non-static declaration
err.c:765: error: previous implicit declaration of ??oad_hdl_sug_file??was here
make: *** [/home/eam/lib/err.o] Error 1
[Linux:/home/eam/src/arch]
yang__guo 于 2009-08-27 08:58:48发表:
我编译完后,运行程序,结果 报:Segmentation fault
但我整个用户下面和/tmp下都查了,没有发现core文件啊
应该怎么处理,程序运行不了,也没的查啊
请高手帮忙解答下,万分感谢!!!
yang__guo 于 2009-08-26 11:55:03发表:
我编译完后,运行程序,结果 报:Segmentation fault
但我整个用户下面和/tmp下都查了,没有发现core文件啊
应该怎么处理,程序运行不了,也没的查啊
请高手帮忙解答下,万分感谢!!!
hspwan 于 2009-08-25 09:14:28发表:
好好,谢谢
yang__guo 于 2009-08-21 20:38:34发表:
终于编译通过,非常感谢!
,这点在unix不需要的
linux 的 c 编译器检查规则比 unix 严格多了,从unix移植过来的程序waring非常多,
使用strlen(),memcpy(),等函数,文件需要加上include
表达式的两边的类型一定要一致,不一致时,需要强行类型转换。。。 。。。
tianyuan008 于 2009-08-21 17:26:38发表:
[i=s] 本帖最后由 tianyuan008 于 2009-8-21 17:33 编辑 [/i]
1.FILE * .. 应该移到函数里面,放到全局域里 stdout 是不确定的.
2. get_std_msg 函数的定义应该放到 err_set_info 函数的前面, 你没有声明 get_std_msg 函数就使用它了, 这种古老的编译器才接受的语法在现在是不能用的
yang__guo 于 2009-08-21 16:32:29发表:
有高手解答一下不,非常感谢啊
yang__guo 于 2009-08-21 09:27:47发表:
2# tianyuan008
谢谢!
我的err。c的部分源代码:
#include
#include
#include
#include
#include
#include
#include
FILE *gfp_out = stdout;---------------------第45行:报:err.c:45: error: initializer element is not constant
#include
。。。 。。。
int err_set_info( char * ps_error_type,
int i_error_no,
int i_severity,
char * ps_file,
long l_line,
char * ps_dtl_msg_fmt,
...
)
{
va_list ap;
char s_detail_msg[ MX_ERR_DTL_MSG_LEN + 1 ];
/*va_start( ap,(void) ps_dtl_msg_fmt );*/
va_start( ap, ps_dtl_msg_fmt );
vsprintf( s_detail_msg, ps_dtl_msg_fmt, ap );
va_end( ap );
。。。 。。。
switch( l_err_type ) {
case ETYPE_CD_OPSYS:
err_opsys_msg ( r_err_info_struct.i_error_no,
r_err_info_struct.s_standard_msg );
break;
case ETYPE_CD_ORACLE:
err_sql_msg ( r_err_info_struct.s_standard_msg );
break;
default:
i_ret_cd = get_std_msg( l_err_type ,------------------第314行,报:err.c:314: error: previous implicit declaration of ??et_std_msg??was here
r_err_info_struct.i_error_no ,
r_err_info_struct.s_standard_msg );
break;
} /* end switch */
。。。 。。。
static int get_std_msg( long l_err_type ,
long l_err_no ,
char * ps_std_msg )
{--------------------第685行:报:err.c:685: error: static declaration of ??et_std_msg??follows non-static declaration,且有乱码??
。。。 。。。
}
现在编译后,报错信息:
[Linux:/home/eam/src/arch]make -f arch.mk
/usr/bin/cc -c -g -I. -DARCH_DEBUG -I/home/eam/include/arch -I/home/eam/include/arch -o /home/eam/lib/err.o err.c
err.c:45: error: initializer element is not constant
err.c:685: error: static declaration of ??et_std_msg??follows non-static declaration
err.c:314: error: previous implicit declaration of ??et_std_msg??was here
err.c:749: error: static declaration of ??et_hdl_sug??follows non-static declaration
err.c:606: error: previous implicit declaration of ??et_hdl_sug??was here
err.c:823: error: static declaration of ??oad_std_msg_file??follows non-static declaration
err.c:703: error: previous implicit declaration of ??oad_std_msg_file??was here
err.c:972: error: static declaration of ??oad_hdl_sug_file??follows non-static declaration
err.c:767: error: previous implicit declaration of ??oad_hdl_sug_file??was here
make: *** [/home/eam/lib/err.o] Error 1
[Linux:/home/eam/src/arch]
麻烦大虾帮忙解决,非常感谢!
主要问题是,
1、error: initializer element is not constant
2、定义的静态函数报错
tianyuan008 于 2009-08-20 19:31:32发表:
[i=s] 本帖最后由 tianyuan008 于 2009-8-20 19:41 编辑 [/i]
没看见代码
另外 varargs.h 不是标准头文件,请用跨平台的 stdarg.h 并修改相应代码