免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6919 | 回复: 11
打印 上一主题 下一主题

linux下程序编译报错,请高手帮忙指点! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-05 09:55 |只看该作者 |倒序浏览
1可用积分
我的程序以前是在HP-UX系统下的,数据库是oracle9.2.0.1,现在我想把程序移植到linux系统下,数据库版本没有变,但是在编译程序时候报告错误,不知道其原因,请各位忙我解释一下。谢谢!


  1. [ocrm@localhost libsrc]$ make all
  2. cc  -c -DDEBUG0 -g -I/home/ocrm/include -I/home/oracle/product/9.2.0/precomp/public -L/home/oracle/product/9.2.0/lib/ -lclntsh `cat /home/oracle/product/9.2.0/lib/ldflags`   `cat /home/oracle/product/9.2.0/lib/sysliblist` -ldl -lm   -L/home/ocrm/lib -lifsfunc -lifsbase  ifsbase.c
  3. ifsbase.c: In function `InsLog':
  4. ifsbase.c:268: parse error before `struct'
  5. ifsbase.c:301: `defoutflag' undeclared (first use in this function)
  6. ifsbase.c:301: (Each undeclared identifier is reported only once
  7. ifsbase.c:301: for each function it appears in.)
  8. ifsbase.c:325: `rc' undeclared (first use in this function)
  9. ifsbase.c:325: `sgbuf' undeclared (first use in this function)
  10. ifsbase.c:362: case label not within a switch statement
  11. ifsbase.c:364: break statement not within loop or switch
  12. ifsbase.c:365: case label not within a switch statement
  13. ifsbase.c:367: break statement not within loop or switch
  14. ifsbase.c:368: case label not within a switch statement
  15. ifsbase.c:372: break statement not within loop or switch
  16. make: *** [ifsbase.o] Error 1
  17. [ocrm@localhost libsrc]$
复制代码

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-07-05 11:38 |只看该作者
估计是头文件问题,方便的话把出错部分的代码贴上来。

[ 本帖最后由 MMMIX 于 2007-7-5 12:16 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-07-05 14:54 |只看该作者
原帖由 MMMIX 于 2007-7-5 11:38 发表于 2楼  
估计是头文件问题,方便的话把出错部分的代码贴上来。


以下是报告错误的代码:
int InsLog(flname,lineno,flag,frm, va_alist)
char* flname;
int lineno;
int flag;
char *frm;
va_dcl
{
    static long llLogfilesize = 0;
    long deflogsize;
    FILE *fp;
    char buf[1024],fname1[100],buf1[1024],alCmdbuf[200],logdir[100];
    va_list  ap;
    struct tm  *sttm;
    int ilRc;
    time_t llDatetime;
    char tmpbuf2[20];
    int agDebugFlag;
    char ifsconf[100],defile[200];;
    struct stat sgbuf;
    int rc;
    int defoutflag;
   
    if ( flag != 0 && flag != 1 && flag != 2 )
    {
        printf("系统错误!InsLog flag 参数传递错误!flag=[%d]\n",flag);
        return -1;
     }
    if ( IFSETC.initflag != 1 )
    {
        printf("系统错误!没有做系统初始化!\n");
        return -1;
    }
    memset ( buf , 0 ,sizeof ( buf ) );
    memset ( fname1 , 0 ,sizeof ( fname1 ) );
    memset ( buf1 , 0 ,sizeof ( buf1 ) );
    memset ( alCmdbuf , 0 ,sizeof ( alCmdbuf ) );
    memset ( logdir , 0 ,sizeof ( logdir ) );
    if (*frm)
    {
        va_start(ap);
        vsprintf(buf, frm, ap);
        va_end(ap);
    }
    sprintf( ifsconf,"%s/%s",IFSETC.home,IFSCONFIG );
    strcpy ( logdir , IFSETC.logdir );
    memset ( defile , 0 ,sizeof ( defile ) );
    switch ( flag )
    {
           case 0:
            strcpy ( defile , IFSETC.errlogname );
            deflogsize = IFSETC.errlogsize;
            defoutflag = IFSETC.errlogflag;
            break;
        case 1:
            strcpy ( defile , IFSETC.tracelogname );
            deflogsize = IFSETC.tracelogsize;
            defoutflag = IFSETC.tracelogflag;
            break;
        case 2:
            strcpy ( defile , IFSETC.detaillogname );
            deflogsize = IFSETC.detaillogsize;
            defoutflag = IFSETC.detaillogflag;
            break;
    }


    /* 自动清空大于 8M 文件 --需要修改此处,改成配置文件 */
    if ( !llLogfilesize )
    {
        ilRc = deflogsize;
        if ((ilRc == -1) || (ilRc == 0)) llLogfilesize = 8388608L;
        else llLogfilesize = ilRc * 1048576L;
    }
sprintf(fname1,"%s/%s/%s",(char *)getenv("HOME"),logdir,defile );
    rc=stat(fname1, &sgbuf);
    if (sgbuf.st_size > llLogfilesize)
    {
        time(&llDatetime);
        sttm = localtime( &llDatetime );
        sprintf( alCmdbuf , "mv %s %s.bak" , fname1 ,fname1 );
        /*
        sprintf(alCmdbuf,"mv %s %s.%02d%02d%02d%02d%02d",
        fname1,fname1,
        sttm->tm_mon+1,
        sttm->tm_mday,
        sttm->tm_hour,
        sttm->tm_min,
        sttm->tm_sec );
        */
        if ( ( access( fname1 , F_OK) ) != -1 )
            system(alCmdbuf);
    }

    /**  **/
    if (( fp = fopen(fname1,"a+")) == NULL)
    {
        fprintf(stderr, "打开文件[%s]出错!\n", fname1 );
        return(-1);
    }
    GetTime(buf1);
    strcat(buf1,": ");
    sprintf(tmpbuf2,"文件[%s] ",flname);
    strcat(buf1, tmpbuf2);
    sprintf(tmpbuf2,"行数[%d] \n",lineno);
    strcat(buf1, tmpbuf2);
    strcat(buf1,buf);

    /*1文件2屏幕9文件和屏幕 0不处理*/
    switch ( defoutflag )
    {
        case 1:
            fprintf( fp,"%s\n",buf1 );
            break;
        case 2:
            fprintf( stdout,"%s\n",buf1 );
            break;
        case 9:
            fprintf( fp,"%s\n",buf1 );
            fprintf( stdout,"%s\n",buf1 );
        defalut:
            break;
    }
    fclose(fp);
    return 0;
}
请帮忙看看问题在哪里?谢谢!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2007-07-05 15:35 |只看该作者
原帖由 pqxpqx 于 2007-7-5 14:54 发表于 3楼  


以下是报告错误的代码:
int InsLog(flname,lineno,flag,frm, va_alist)
char* flname;
int lineno;
int flag;
char *frm;
va_dcl
{
    static long llLogfilesize = 0;
    long deflogsize;
  ...

没看出什么毛病,只看出这段代码很老了。

论坛徽章:
0
5 [报告]
发表于 2007-07-05 15:43 |只看该作者
原帖由 MMMIX 于 2007-7-5 15:35 发表于 4楼  

没看出什么毛病,只看出这段代码很老了。


谢谢!我把这段代码放在HP-UX上编译没有问题,一拿到Linux上就编译有问题,我把这段代码注释掉,编译就可以通过。
我在找找问题吧!谢谢你了!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2007-07-05 15:54 |只看该作者
原帖由 pqxpqx 于 2007-7-5 15:43 发表于 5楼  


谢谢!我把这段代码放在HP-UX上编译没有问题,一拿到Linux上就编译有问题,我把这段代码注释掉,编译就可以通过。
我在找找问题吧!谢谢你了!

客气了。

论坛徽章:
0
7 [报告]
发表于 2007-07-05 18:16 |只看该作者
会不会是

struct stat sgbuf;

这一句编译出了错?也许是头文件路径的差别造成的。
man 2 stat 试试?

论坛徽章:
0
8 [报告]
发表于 2007-07-06 10:44 |只看该作者
谢谢haplo !我已经找到答案了。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2007-07-06 10:49 |只看该作者
原帖由 pqxpqx 于 2007-7-6 10:44 发表于 8楼  
谢谢haplo !我已经找到答案了。

说来听听。

论坛徽章:
0
10 [报告]
发表于 2007-07-06 11:18 |只看该作者
我增加了头文件
#include <sys/stat.h>
#include <unistd.h>
#include <stdarg.h>
编译 没有问题了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP