LINUX移植中常见的问题及解决的方法.ppt

上传人:仙人指路1688 文档编号:2857078 上传时间:2023-02-27 格式:PPT 页数:28 大小:377.50KB
返回 下载 相关 举报
LINUX移植中常见的问题及解决的方法.ppt_第1页
第1页 / 共28页
LINUX移植中常见的问题及解决的方法.ppt_第2页
第2页 / 共28页
LINUX移植中常见的问题及解决的方法.ppt_第3页
第3页 / 共28页
LINUX移植中常见的问题及解决的方法.ppt_第4页
第4页 / 共28页
LINUX移植中常见的问题及解决的方法.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《LINUX移植中常见的问题及解决的方法.ppt》由会员分享,可在线阅读,更多相关《LINUX移植中常见的问题及解决的方法.ppt(28页珍藏版)》请在三一办公上搜索。

1、C程序在LINUX移植中常见问题及解决方法,银博科技,公司简介,西安银博科技发展公司成立于1992年,属国有高新技术企业,位于西安市高新技术产业区高新路42号金融大厦16层。1993年被西安市科学技术委员会认定为“高新技术企业”,每年都被评为西安市高新技术企业百强企业。公司主要从事:计算机软件产品开发,系统集成,网络建设,银行业务信息系统的开发建设及解决方案,开发建设现代医院管理信息系统,研制生产网络信息安全产品,设计安装重要场所的防盗报警和电视监控系统,提供计算机及外部设备的维修和长期保修服务等。,编译器的改变,C程序编译器由unix的cc改换为gccgcc全称:GNU project C

2、and C+compiler集中了c、c+、Objective C 三个编译版本,可以编译 用这三语言编写的源代码。gcc的版本gcc vgcc的安装位置/usr/lib/gcc-lib/target/version/usr/lib/gcc-lib/i386-cosix-linux/3.2/,gdb调试器,gdb-The GNU Debuggergdb的主要功能运行程序,设置所有能影响程序运行的选项保证程序在制定的条件下停止在程序停止时,可以检查变量的赋值修改程序,继续调试gdb的启动方式gdb program:指定要调试的程序gdb program core:指定要调试的程序及其coredu

3、mp文件gdb program pid:指定要调试的程序及目前正在执行的进程id号,gdb调试器,退出gdb使用quitCtrl+DCtrl+C 结束任何一个gdb的命令,返回gdb的输入模式gdb的帮助help或h 得到gdb命令类的列表Help status 得到一个status类的列表Help command 详细的列出单个命令的资料Info 显示程序的状态Show 显示gdb自身的状态Show version:显示gdb的版本号Show copying:显示 版权信息Show warranty:显示担保信息,GCC命令行选项,基本 gdb命令file 装入想要调试的可执行文件 kil

4、终止正在调试的程序list 列出产生执行文件的源代码的一部分next 执行一行源代码但不进入函数内部 step 执行一行源代码但进入函数内部run 执行当前被调用的程序quit 终止gdbwatch 监视一个变量的值 break 在代码里设置断点,这使程序执行到这里被挂起make 能不退出gdb就可以重新产生可执行文件shell 不必离开gdb就能执行shell命令,LINUX移植中常见的问题,缺少程序相应的系统头文件系统调用中动态链接库的改变两个系统中函数的差别程序环境变量的缺失两个系统中文件目录文件格式的差别两个系统中编译器之间的差别两个系统在Informix数据库开发中的差别两个系统中命

5、令及其参数的差别,缺少程序相应的系统头文件,找不到hbjm.h文件原因:在/usr/include目录下找不到hbjm.h文件解决:从原unix机/usr/include目录下找到此文件到linux机上,动态链接库的改变,高版本的开发库glibc-devel-2.2.90-24中,没有提供libsocket.a库解决:增加libortcp的链接将crtbegin.ocrtbeginS.ocrtbeginT.ocrtend.ocrtenS.o 拷入当前编译目录,两个系统中函数的差别,生成临时文件名失败。Linux系统下,对mktemp()函数需替换为mkstemp(),用法不同在linux下,高

6、版本的开发库已经对tempnam函数不在支持。系统建议使用mkstemp()函数来替代。,两个系统中函数的差别,修改例程如下:func()char strFileName50;/strcpy(strFileName,“/tmp/file_XXX”);strcpy(strFileName,“/tmp/file_XXXXXX”);/注意XXX改为XXXXXX/mktemp(strFileName);mkstemp(strFileName);,两个系统中函数的差别,由于Linux高版本库向国际化标准靠近,对一些旧的函数不在支持.需要将c语言中普通函数gets替换成宽字符处理函数fgetws.解决:更

7、改生成库libhbjm.a中的文件I_chr.c 第79行中的函数gets()为fgetws()/gets(cmd);fgetws(cmd);,程序环境变量的缺失,在初始化网点initnode,这个程序的编译时,连接的是informix的动态库,libifsql.so在/home/Informix/lib/esql目录下,环境变量中没有此路径设置。解决:在环境变量LD_LIBRARY_PATH的变量中增加/home/informix/lib/esql,两个系统中文件目录文件格式的差别,文件目录的差别在UNIX系统中默认目录为/usr/sam,LINUX系统默认目录为/home/sam解决:将原

8、来所有/usr/sam路径改为/home/sam,两个系统中文件目录文件格式的差别,文件格式的差别拷贝文件到软盘上的数据,在打卡机上读数据时报错解决:在拷贝软盘之前,对文件格式进行转换:将linux格式转换成dos格式unix2dos filenamedos2unix filename,两个系统中编译器之间的差别,函数调用前未声明gcc编译器要求所有函数在调用前,必须定义或声明函数。解决:在cash0703.ec前定义函数static int Print_Page(int iPage);static int Print_AllPage(int flag);static int Get_Node

9、Name(char*cNode,char strNodename);,两个系统中编译器之间的差别,makefile文件中头文件引用方式的不兼容解决:在/home/sam/scr/kjyw/makefile文件中原代码:esql-DPORT_COM=0 XDEBUG=”log/kjyw/log”c kjyw.ec I/usr/include/xpc_api.h 更改后:esql-DPORT_COM=0 XDEBUG=”log/kjyw/log”c kjyw.ec 在kjyw.ec程序中定义#include,两个系统中编译器之间的差别,Linux下对char和char*的变量定义要求更严格。函数对

10、将char的字符数组做为返回值时,出现warning对返回字符串地址的函数进行修改,方法如下。修改例程如下:,两个系统中编译器之间的差别,/*将程序中的数组变量改定义为指针变量*/func()/char strTmp30;char*strTmp;strTmp=(char*)malloc(30);return strTmp;,两个系统中编译器之间的差别,指针数组定义方式解决:/home/sam/scr/kwh/dj.ec程序中13行定义为:static char*djstr=解冻,冻结,;更改后:static char*djstr=解冻,冻结,两个系统在Informix数据库开发中的差别,Inf

11、ormix se7.22 for linux 的语法要求和Informix se for sco-unix的差异性。Informix se7.22 for linux中,要求打开一个修改游标时,必须在事务中。informix数据库中如果没有isql文件时可以改用dbaccess。,两个系统在Informix数据库开发中的差别,/*打开游标必须在事务中*/func()$char strCola$begin work;$declare update_cur cursor for select col_1 into$strCola from table_1 for update;$open upda

12、te_cur;$close update_cur;$commit work;,两个系统中命令及其参数的差别,Shell 的差别Unix系统中常用的sh、ksh、cshLinux系统中常用bashcompress不支持-H参数,改用-f没有doscp命令,用mcopy命令替代,添加需要的参数tar 命令-z支持.gz压缩格式-P绝对路径的压缩和解压ls 命令,没有l和lf命令ls l和unix 系统中的 l相近ls-F和unix 系统中的 lf相近 rm-f和unix 系统中的 rm相近,其他问题,使用system调用时,父进程对终端的控制影响到子进程对终端的控制解决:在system调用前,保存

13、父进程对终端的控制参数,恢复原终端的控制参数,调用完成后,恢复父进程对终端的控制参数。增加runprgram(char*cmd)函数取代system(char*cmd),其他问题,函数引用出错解决:原系统定义为clear,和系统命令有冲突,改为clear_sc,替换/home/sam/scr/xtwh/menu.ec中 clear后程序编译通过。,其他问题,NULL问题函数Add_record 返回需要一个整形值。而返回为NULL,static int Add_record(C_CASHINFO*head,DB_FPART db_Cfpart)return NULL;在stddeef.h中定义NULL为空指针型#define NULL(void*)0)解决:更改第60行返回值为0;return 0;,其他问题,程序运行的权限问题其他属组没有读或写的权限函数传递的参数类型不相匹配等问题,谢 谢!,欢迎大家参加交流,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号