免费注册 查看新帖 |

Chinaunix

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

[C] pro*c的问题,普通c文件可以被gcc通过,由pro*c预编译的就不行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-25 08:37 |只看该作者 |倒序浏览
20可用积分
[oracle@oracle11gTux1 lessons]$ cat gg.pc
#include <stdio.h>
#include <stdlib.h>

int main()
{
        printf("result");
        return 0;
}
[oracle@oracle11gTux1 lessons]$ source /etc/profile
[oracle@oracle11gTux1 lessons]$ proc gg.pc

Pro*C/C++: Release 11.1.0.6.0 - Production on Thu Jun 25 03:54:28 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

System default option values taken from: /u01/oracle/precomp/admin/pcscfg.cfg

[oracle@oracle11gTux1 lessons]$ gcc -o gg gg.c -I /u01/oracle/precomp/public -L /u01/oracle/lib -l clntsh
gg.c:117: error: syntax error before string constant
gg.c:125: error: syntax error before '}' token
gg.c:131: error: syntax error before string constant

[oracle@oracle11gTux1 lessons]$

[ 本帖最后由 simhare 于 2009-6-25 08:51 编辑 ]

最佳答案

查看完整内容

用g++编译大部分C程序没有问题,当然还是有极小部分有问题的,有问题的话就学上面程序用extern "C" 罩住有问题的程序就行了: 117 extern "C" { 125 }因为extern "C"是C++用来引用C的声明,所以必须要用g++来编译。[ 本帖最后由 mgqw 于 2009-6-25 09:07 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-06-25 08:37 |只看该作者
用g++编译大部分C程序没有问题,当然还是有极小部分有问题的,有问题的话就学上面程序用extern "C" 罩住有问题的程序就行了:
    117 extern "C" {
    125 }

因为extern "C"是C++用来引用C的声明,所以必须要用g++来编译。

[ 本帖最后由 mgqw 于 2009-6-25 09:07 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-06-25 08:39 |只看该作者

回复 #1 simhare 的帖子

============================================用hello.c测试的结果:
[oracle@oracle11gTux1 lessons]$ cat hello.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
        printf("\nhello\n");
        return 0;
}
[oracle@oracle11gTux1 lessons]$ gcc -o hello hello.c
[oracle@oracle11gTux1 lessons]$ ./hello

hello
[oracle@oracle11gTux1 lessons]$

论坛徽章:
0
4 [报告]
发表于 2009-06-25 08:41 |只看该作者

回复 #2 simhare 的帖子

===========================================用proc编译生成的gg.c文件
[oracle@oracle11gTux1 lessons]$ vi gg.c

      1
      2 /* Result Sets Interface */
      3 #ifndef SQL_CRSR
      4 #  define SQL_CRSR
      5   struct sql_cursor
      6   {
      7     unsigned int curocn;
      8     void *ptr1;
      9     void *ptr2;
     10     unsigned int magic;
     11   };
     12   typedef struct sql_cursor sql_cursor;
     13   typedef struct sql_cursor SQL_CURSOR;
     14 #endif /* SQL_CRSR */
     15
     16 /* Thread Safety */
     17 typedef void * sql_context;
     18 typedef void * SQL_CONTEXT;
     19
     20 /* Object support */
     21 struct sqltvn
     22 {
     23   unsigned char *tvnvsn;
     24   unsigned short tvnvsnl;
     25   unsigned char *tvnnm;
     26   unsigned short tvnnml;
     27   unsigned char *tvnsnm;
     28   unsigned short tvnsnml;
     29 };
     30 typedef struct sqltvn sqltvn;
     31
     32 struct sqladts
     33 {
     34   unsigned int adtvsn;
     35   unsigned short adtmode;
     36   unsigned short adtnum;
     37   sqltvn adttvn[1];
     38 };
     39 typedef struct sqladts sqladts;
     40
     41 static struct sqladts sqladt = {
     42   1,1,0,
     43 };
     44
     45 /* Binding to PL/SQL Records */
     46 struct sqltdss
     47 {
     48   unsigned int tdsvsn;
     49   unsigned short tdsnum;
     50   unsigned char *tdsval[1];
     51 };
     52 typedef struct sqltdss sqltdss;
     53 static struct sqltdss sqltds =
     54 {
     55   1,
     56   0,
     57 };
     58
     59 /* File name & Package Name */
     60 struct sqlcxp
     61 {
     62   unsigned short fillen;
     63            char  filnam[6];
     64 };
     65 static const struct sqlcxp sqlfpn =
     66 {
     67     5,
     68     "gg.pc"
     69 };
     70
     71
     72 static unsigned int sqlctx = 2115;
     73
     74
     75 static struct sqlexd {
     76    unsigned int   sqlvsn;
     77    unsigned int   arrsiz;
     78    unsigned int   iters;
     79    unsigned int   offset;
     80    unsigned short selerr;
     81    unsigned short sqlety;
     82    unsigned int   occurs;
     83       const short *cud;
     84    unsigned char  *sqlest;
     85       const char  *stmt;
     86    sqladts *sqladtp;
     87    sqltdss *sqltdsp;
     88             void  **sqphsv;
     89    unsigned int   *sqphsl;
     90             int   *sqphss;
     91             void  **sqpind;
     92             int   *sqpins;
     93    unsigned int   *sqparm;
     94    unsigned int   **sqparc;
     95    unsigned short  *sqpadto;
     96    unsigned short  *sqptdso;
     97    unsigned int   sqlcmax;
     98    unsigned int   sqlcmin;
     99    unsigned int   sqlcincr;
    100    unsigned int   sqlctimeout;
    101    unsigned int   sqlcnowait;
    102               int   sqfoff;
    103    unsigned int   sqcmod;
    104    unsigned int   sqfmod;
    105             void  *sqhstv[1];
    106    unsigned int   sqhstl[1];
    107             int   sqhsts[1];
    108             void  *sqindv[1];
    109             int   sqinds[1];
    110    unsigned int   sqharm[1];
    111    unsigned int   *sqharc[1];
    112    unsigned short  sqadto[1];
    113    unsigned short  sqtdso[1];
    114 } sqlstm = {12,1};
    115
    116 // Prototypes
    117 extern "C" {
    118   void sqlcxt (void **, unsigned int *,
    119                struct sqlexd *, const struct sqlcxp *);
    120   void sqlcx2t(void **, unsigned int *,
    121                struct sqlexd *, const struct sqlcxp *);
    122   void sqlbuft(void **, char *);
    123   void sqlgs2t(void **, char *);
    124   void sqlorat(void **, unsigned int *, void *);
    125 }
    126
    127 // Forms Interface
    128 static const int IAPSUCC = 0;
    129 static const int IAPFAIL = 1403;
    130 static const int IAPFTL  = 535;
    131 extern "C" { void sqliem(unsigned char *, signed int *); }   
    132
    133 typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
    134 typedef struct { unsigned short len; unsigned char arr[1]; } varchar;
    135
    136 /* cud (compilation unit data) array */
    137 static const short sqlcud0[] =
    138 {12,4130,1,0,0,
    139 };
    140
    141
    142 #include <stdio.h>
    143 #include <stdlib.h>
    144
    145 int main()
    146 {
    147         printf("result");
    148         return 0;
    149 }
[oracle@oracle11gTux1 lessons]$

[ 本帖最后由 simhare 于 2009-6-25 08:46 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-06-25 08:47 |只看该作者

回复 #3 simhare 的帖子

今天哪位高手来帮我啊?救救我啊。。。。快要疯了。

论坛徽章:
0
6 [报告]
发表于 2009-06-25 08:49 |只看该作者

回复 #1 simhare 的帖子

我100%结贴的,求哪位路过的高手给个具体的意见吧,应该怎么调整呢?

论坛徽章:
0
7 [报告]
发表于 2009-06-25 08:49 |只看该作者
又来了,
你改用g++编译试试
我记得extern "C"是C++用来兼容C的

论坛徽章:
0
8 [报告]
发表于 2009-06-25 08:53 |只看该作者

回复 #6 mgqw 的帖子


[oracle@oracle11gTux1 lessons]$ gcc -o gg gg.c -I /u01/oracle/precomp/public -L /u01/oracle/lib -l clntsh
换成
[oracle@oracle11gTux1 lessons]$ g++ -o gg gg.c -I /u01/oracle/precomp/public -L /u01/oracle/lib -l clntsh
???

论坛徽章:
0
9 [报告]
发表于 2009-06-25 09:00 |只看该作者
对,除了gcc变成g++其他啥都不变

论坛徽章:
0
10 [报告]
发表于 2009-06-25 09:02 |只看该作者

回复 #6 mgqw 的帖子

我试过了,可以!
===========
那么用g++编译c程序应该是没问题的吧?
-------------------
我是在什么配置里指定一定要用g++来编译c程序的呢?

[ 本帖最后由 simhare 于 2009-6-25 09:03 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP