会计考友 发表于 2012-8-4 12:16:06

红旗认证辅导:SCOUNIX到Linux操作系统的程序移植问题

要求把一个原先运行在SCO UNIX操作系统的柜面系统移植到Red Hat Linux AS平台上。此刻仿佛有一个趋向,金融行业的的原先运行在SCO下的系统都筹备迁移到LINUX下。   下面简要清算一下,迁移过程中的一些心得体味。
一、SCO 的cc 与LINUX 的gcc的一些分歧
  总的来说,linux的gcc编译器相对sco下的cc要严酷良多。经由过程此次移植发现SCO的cc对轨范的要求其实不怎么严谨。举个例子,好比strcpy()函数应该是2个函数,如不美观你给他3个参数,编译也能经由过程。还有,如不美观一个函数的参数应该是传值,你给它传一个地址,cc也不会报错。
  SCO的cc与linux的gcc在有关空指针的措置上的分歧是最较着的。好比,strcpy(),strncpy(),strcmp(),strncmp(),fclose()。在SCO上,如不美观参数有一个是空指针,轨范不会core,但在LINUX下,这些函数只要有一个是空指针,轨范运行过程中就会core。在移植过程中,我们发现只要轨范运行过程中呈现core,十有八九是因为空指针的问题。
  是以,移植的第一步,我么就对上述常见的字符串操作函数,做了一层封装,然后用封装过的函数来全局替代原本的函数。
二、gdb的使用
  因为以前没在liunx下写过轨范,对gdb调试工具也没有使用过。此次移植还学会了gdb的一些根基调试轨范。
  gdb 可执行轨范
  b 设置断点
  r 运行轨范
  c 端点后从头运行轨范
  n 执行下一条语句
  s 进入到函数体内调试(相对于n)
  attach PID 调试正在运行的轨范
三、关于core文件
  在SCO下,一般轨范core时,城市在可执行目录下生成一个core文件,我们可以使用dbx 来查观点式的什么处所呈现了core。
  移植到LINUX下,一路头,轨范core时,怎么都没有生成core文件。后来,才发现,需要酬报设定core文件所许可的最大值。如不美观没有设定,默认是0,也就不会生成core文件。
  设定体例如下:
  执行 ulimit -c 102400,可以把这个呼吁放在用户的登录shell琅缦沔,这样不用每次登录时从头设置了。
  使用“gdb 可执行轨范名 core文件名”可以查看大致在什么处所轨范呈现core。
页: [1]
查看完整版本: 红旗认证辅导:SCOUNIX到Linux操作系统的程序移植问题