当前位置:  技术问答>linux和unix

关于linux下和AIX下编译的问题

    来源: 互联网  发布时间:2016-03-29

    本文导语:  我在linux 下使用可以编译过去,运行起来也一切正常的代码,在AIX下 使用xlc编译就总是出错,而使用cc_r编译的话,编译倒是没有问题,但运行后一些函数返回异常,造成程序崩溃。具体情况如下,请高手指点: 首...

我在linux 下使用可以编译过去,运行起来也一切正常的代码,在AIX下 使用xlc编译就总是出错,而使用cc_r编译的话,编译倒是没有问题,但运行后一些函数返回异常,造成程序崩溃。具体情况如下,请高手指点:
首先是代码:
--------------------------------------------------------------------------------------------------
#include  
#include  
#include  

#include  

#include  

EXEC SQL BEGIN DECLARE SECTION; 
    VARCHAR  ID[19]; 
EXEC SQL END DECLARE SECTION; 

EXEC ORACLE OPTION (ORACA=YES); 

EXEC ORACLE OPTION (RELEASE_CURSOR=YES); 


void sql_error() 

/* This is the Oracle error handler. 
* Print diagnostic text containing the error message, 
* current SQL statement, and location of error. 
*/ 
    printf("n%.*sn", 
      sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc); 
    printf("in "%.*s..."n", 
        oraca.orastxt.orastxtl, oraca.orastxt.orastxtc); 
    printf("on line %d of %.*s.nn", 
        oraca.oraslnr, oraca.orasfnm.orasfnml, 
        oraca.orasfnm.orasfnmc); 

/* Disable Oracle error checking to avoid an infinite loop 
* should another error occur within this routine as a 
* result of the rollback. 
*/ 
    EXEC SQL WHENEVER SQLERROR CONTINUE; 

/* Roll back any pending changes and disconnect from Oracle. */ 
    EXEC SQL ROLLBACK RELEASE; 

    exit(1); 



int dbConnect(char* username, char* password){ 


/* Call routine sql_error() if an ORACLE error occurs. */ 

    EXEC SQL WHENEVER SQLERROR DO sql_error(); 

/* Save text of current SQL statement in the ORACA if an 
* error occurs. 
*/ 
    oraca.orastxtf = ORASTFERR; 

/* Connect to Oracle. */ 

EXEC ORACLE OPTION (RELEASE_CURSOR = YES); 

    EXEC SQL CONNECT :username IDENTIFIED BY :password; 
    puts("nConnected to ORACLE.n"); 
    return 0; 



int executeSQL(char* sql){ 
EXEC SQL EXECUTE IMMEDIATE :sql; 
return 0; 



int commit(){ 
EXEC SQL COMMIT WORK RELEASE; 
return 0; 



int getID(char* id){ 

memset((char*)ID.arr, 0, ID.len); 
EXEC SQL SELECT getID() 
            INTO :ID 
            FROM dual; 
ID.arr[ID.len] = ''; 

strncpy(id, ID.arr, ID.len); 
/*id = (char*)strdup((char*)ID.arr);*/ 
/*printf("ID:%sn", ID.arr);*/ 
return 0; 



int main(){ 
int ret = -1; 
char sql[1024]; 
char id[19]; 
  char    *username = "abc"; 
  char    *password = "abc"; 
memset(id, 0, 19); 

ret = dbConnect(username, password); 

ret = getID(id); 
printf("ID:%sn", id); 

strcpy((char *)sql, "INSERT INTO OrigReceTab2(MSGID,RECEBNKBIC,OSN,MSGSORT,SENTDT,SENTBNKBIC,SESSIONNO,ISN,RECEDT,PRI,TRAILER,IPTTM) values ('200805301352164611','BKCHCNBJXXX','388213','101',TO_DATE('2008-01-09 01:43:00','YYYY-MM-DD HH24:Mi:SS'),'FRNYUS33XXX','3354','097980',TO_DATE('2008-01-09 14:43:00','YYYY-MM-DD HH24:Mi:SS'),'N','{MAC:989F7473}{CHK:710153F3FB13}{H10801091446}',SYSDATE)"); 
puts(sql); 
ret = executeSQL(sql); 
strcpy((char *)sql, "INSERT INTO MSGTAGTAB(TAGID,MSGID,TAG,VLU) values (getID(),'200805301352164611','20','BFSCCN1080108001')"); 
puts(sql); 
ret = executeSQL(sql); 
ret = commit(); 
return 0; 


--------------------------------------------------------------------------------------------------

这段代码在RHEL下一切正常 proc后的c代码在编译运行后都没什么问题。
但在AIX下编译的时候,
使用xlc编译时总是说上面代码红色部分(strncpy(id, ID.arr, ID.len); )这一句有如下错误:
--------------------------------------------------------
"../db/swiftdb.c", line 544.23: 1506-280 (E) Function argument assignment betwee
n types "const char*" and "unsigned char*" is not allowed.
--------------------------------------------------------
编译选项如下:
========================================================
xlc -L/ora10g/product/10g/rdbms/lib/ -lclntsh  -lld -lm `cat /ora10g/product/10g
/rdbms/lib/sysliblist`  -lm  -lc_r -lpthreads -q64 -qspill=3200 -g -I /usr/inclu
de -I /ora10g/product/10g/rdbms/precomp/public -L/usr/lib -L/itast01/itas/bin/ba
tch
========================================================
而在使用cc_r编译的时候,编译正常,但代码中使用的类似如下的语句
pFirst = (char*)strpbrk(tmp,"#");
if (pFirst == tmp) {
/*printf("t# this is a note...n");*/
}else{


时,当tmp首字符为“#”时,进入的却是else的分支。
感觉应该是连接了不同的库函数表现不一样造成的,可就是不知道哪里的问题。请大家指教。

|
1、ID.arr是unsigned char*,而strncpy要的是const char*
2、C本身是容许没有函数声明就调用函数的。一般编译器有选项,强制要求所有调用的函数都必须有原型声明。

    
 
 

您可能感兴趣的文章:

  • 一段可以在linux下编译并且运行正确的程序,在windows下编译也通不过.为什么?
  • 刚安装linux,如何在linux下编写程序?
  • 要在linux下编写关于openssl的程序,并要封装成.cab供win安装ActiveX
  • 怎样在linux下编译java?
  • 如何在linux下编写c程序
  • linux下编译firefox的问题
  • 在linux下编c程,找库
  • 急!急!急!急!急!如何在Linux下编译运行C++程序
  • 请问如何在linux环境下编写C++
  • 怎么在LINUX下编译JAVA?
  • ★★★在linux下编译pro*c文件,提示"sqlcxt"没有定义,哪位高手帮忙,定赠分!
  • 大家在UNIX/LINUX下编写C/C++程序时,用那些库?
  • 如何在linux下编写C程序?
  • 求教在LINUX下编写应用程序
  • 如何在linux下编译.pc程序
  • 请教:Linux下编译c代码,运行程序时出现undefined symbol exp
  • 求在Windows下编译Linux C程序的快捷途径?
  • linux下编译ACE5.7.5(总结)
  • linux下编译c++程序,系统头文件中包含的函数的定义源代码可以查看吗?
  • windows下编写的JAVA程序如何放到Linux下运行??
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • linux 繁体 汉字输入法 问题 linux 繁体 汉字输入法 问题
  • Linux 下c++开发error while loading shared libraries问题解决
  • 先安装linux,后安装winxp,能否解决正常启动linux的问题不?(初学者问题,很容易回答)
  • 弱弱的一问,linux下的中文问题及网络问题,分不是问题
  • Linux新手问,Linux安装问题。
  • linux下游戏问题。(菜鸟问题)
  • 初学Linux,发现Linux下的版本问题很头痛。【系列问题】
  • 高深问题:有了linux内核源代码如何做成一个linux操作系统
  • 一个很菜的问题,关ARM与linux内核裁剪的问题!
  • vmware装的linux,通过win2000访问linux的web服务器有问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 公告:CSDN AIX论坛有奖话题讨论活动(七)——本期话题:在海量运算方面,和Linux系统相比,AIX系统有优势吗?
  • linux -> aix 发展
  • 公告:CSDN AIX论坛有奖话题讨论活动(八)——本期话题:除了数据库应用,还有哪些应用也可以运行于AIX系统之上?(和Linux系统相比较,性能更优)
  • 菜鸟问:如何将C++从AIX移植到Linux
  • libxml2是针对aix、sco、linux分不同版本还是统一版本?
  • NOVELL LINUX DESKTOP 9 和AIX是一回事么?
  • AIX下开发的C代码,在LINUX下面编译,提示找不到standards.h文件
  • 如何将Aix上的oracle 物理备份 然后再在linux 系统上还原oracle
  • 关于linux 或AIX中命令回显的问题
  • Hp Unix 或Linux下用tar归档,Aix Unix无法解归档,急!
  • linux--aix rsync备份
  • **** Linux上的程序移植到AIX上,Makefile怎么写? *****
  • linux/AIX中.profile里的LANG=C是什么意思?
  • Linux,aix,windows下可以查询非本进程的信号处理函数吗?
  • aix下的makefile跟其他版本linux的有什么不同
  • 急!哪位朋友在aix系统下配置过apache+tomcat ? 它所使用的apache+tomcat程序,是否可以用在linux下的程序是一样的 ? 在哪儿可以下载
  • linux下面如何远程管理其他Unix(如AIX)机器?提前有分,解决后本帖分数加满。
  • AIX上的daemon程序如何写啊?和linux上一样吗?
  • 如何顺利的从LINUX过度到AIX
  • linux 程序移到aix上,makefile 怎么改?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 技术文章 iis7站长之家
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3