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

上传人:bao****ty 文档编号:132874586 上传时间:2020-05-21 格式: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全称 GNUprojectCandC

2、compiler集中了c c ObjectiveC三个编译版本 可以编译用这三语言编写的源代码 gcc的版本gcc vgcc的安装位置 usr lib gcc lib target version usr lib gcc lib i386 cosix linux 3 2 gdb调试器 gdb TheGNUDebuggergdb的主要功能运行程序 设置所有能影响程序运行的选项保证程序在制定的条件下停止在程序停止时 可以检查变量的赋值修改程序 继续调试gdb的启动方式gdbprogram 指定要调试的程序gdbprogramcore 指定要调试的程序及其coredump文件gdbprogrampi

3、d 指定要调试的程序及目前正在执行的进程id号 gdb调试器 退出gdb使用quitCtrl DCtrl C结束任何一个gdb的命令 返回gdb的输入模式gdb的帮助help或h得到gdb命令类的列表Helpstatus得到一个status类的列表Helpcommand详细的列出单个命令的资料Info显示程序的状态Show显示gdb自身的状态Showversion 显示gdb的版本号Showcopying 显示版权信息Showwarranty 显示担保信息 GCC命令行选项 基本gdb命令file装入想要调试的可执行文件kil终止正在调试的程序list列出产生执行文件的源代码的一部分next执

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

5、lude目录下找不到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下 高版本的开发库已经对tempnam函数不在支持 系统建议使用mkstemp 函数来替代 两个系统中函

6、数的差别 修改例程如下 func charstrFileName 50 strcpy strFileName tmp file XXX strcpy strFileName tmp file XXXXXX 注意XXX改为XXXXXX mktemp strFileName mkstemp strFileName 两个系统中函数的差别 由于Linux高版本库向国际化标准靠近 对一些旧的函数不在支持 需要将c语言中普通函数gets替换成宽字符处理函数fgetws 解决 更改生成库libhbjm a中的文件I chr c第79行中的函数gets 为fgetws gets cmd fgetws cmd

7、程序环境变量的缺失 在初始化网点initnode 这个程序的编译时 连接的是informix的动态库 libifsql so在 home Informix lib esql目录下 环境变量中没有此路径设置 解决 在环境变量LD LIBRARY PATH的变量中增加 home informix lib esql 两个系统中文件目录文件格式的差别 文件目录的差别在UNIX系统中默认目录为 usr sam LINUX系统默认目录为 home sam解决 将原来所有 usr sam路径改为 home sam 两个系统中文件目录文件格式的差别 文件格式的差别拷贝文件到软盘上的数据 在打卡机上读数据时报错

8、解决 在拷贝软盘之前 对文件格式进行转换 将linux格式转换成dos格式unix2dosfilenamedos2unixfilename 两个系统中编译器之间的差别 函数调用前未声明gcc编译器要求所有函数在调用前 必须定义或声明函数 解决 在cash0703 ec前定义函数staticintPrint Page intiPage staticintPrint AllPage intflag staticintGet NodeName char cNode charstrNodename 两个系统中编译器之间的差别 makefile文件中头文件引用方式的不兼容解决 在 home sam sc

9、r kjyw makefile文件中原代码 esql DPORT COM 0 XDEBUG log kjyw log ckjyw ec I usr include xpc api h更改后 esql DPORT COM 0 XDEBUG log kjyw log ckjyw ec在kjyw ec程序中定义 include 两个系统中编译器之间的差别 Linux下对char 和char 的变量定义要求更严格 函数对将char 的字符数组做为返回值时 出现warning对返回字符串地址的函数进行修改 方法如下 修改例程如下 两个系统中编译器之间的差别 将程序中的数组变量改定义为指针变量 func

10、charstrTmp 30 char strTmp strTmp char malloc 30 returnstrTmp 两个系统中编译器之间的差别 指针数组定义方式解决 home sam scr kwh dj ec程序中13行定义为 staticchar djstr 解冻 冻结 更改后 staticchar djstr 解冻 冻结 两个系统在Informix数据库开发中的差别 Informixse7 22forlinux的语法要求和Informixseforsco unix的差异性 Informixse7 22forlinux中 要求打开一个修改游标时 必须在事务中 informix数据库中

11、如果没有isql文件时可以改用dbaccess 两个系统在Informix数据库开发中的差别 打开游标必须在事务中 func charstrCola beginwork declareupdate curcursorforselectcol 1into strColafromtable 1forupdate openupdate cur closeupdate cur commitwork 两个系统中命令及其参数的差别 Shell的差别Unix系统中常用的sh ksh cshLinux系统中常用bashcompress不支持 H参数 改用 f没有doscp命令 用mcopy命令替代 添加需要的

12、参数tar命令 z支持 gz压缩格式 P绝对路径的压缩和解压ls命令 没有l和lf命令ls l和unix系统中的l相近ls F和unix系统中的lf相近rm f和unix系统中的rm相近 其他问题 使用system调用时 父进程对终端的控制影响到子进程对终端的控制解决 在system调用前 保存父进程对终端的控制参数 恢复原终端的控制参数 调用完成后 恢复父进程对终端的控制参数 增加runprgram char cmd 函数取代system char cmd 其他问题 函数引用出错解决 原系统定义为clear 和系统命令有冲突 改为clear sc 替换 home sam scr xtwh menu ec中clear后程序编译通过 其他问题 NULL问题函数Add record返回需要一个整形值 而返回为NULL staticintAdd record C CASHINFO head DB FPARTdb Cfpart returnNULL 在stddeef h中定义NULL为空指针型 defineNULL void 0 解决 更改第60行返回值为0 return0 其他问题 程序运行的权限问题其他属组没有读或写的权限函数传递的参数类型不相匹配等问题 谢谢 欢迎大家参加交流

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号