当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 关于Linux下编写和编译程序的几个问题

Unix/Linux
Linux命令Man解释:useradd:帐号建立或更新
Linux 网管 123 --- 第7章. 自订的组态及管理内容 -7.使用 Linuxc
Linux 网管 123 --- 第8章. 备份及回存程序 -1.伺服器备份程序
Linux 网管 123 --- 第8章. 备份及回存程序 -2.伺服器回存程序(tar.
Linux 网管 123 --- 第8章. 备份及回存程序 -3.Cisco 路由器组态备
Linux 网管 123 --- 第9章. 各种杂项管理工作 -1.检查储存空间
Linux 网管 123 --- 第9章. 各种杂项管理工作 -2.管理进程
Linux 网管 123 --- 第9章. 各种杂项管理工作 -3.进程的启动及停止
Linux 网管 123 --- 第9章. 各种杂项管理工作 -4.使用 Cron 及 C
Linux 网管 123 --- 第10章. 升级 Linux 及其他应用软体 -1.使用
Linux 网管 123 --- 1. 前言 2. 简介
Linux 网管 123 --- 第3章. 概观 Linux
Linux 网管 123 --- 第4章. 安装及硬体组态 - 1.建立一张安装磁片
轻轻松松的安装Slackware Linux -- 4.如何在硬碟建置Linux系统
轻轻松松的安装Slackware Linux -- 5.其他非标准安装程序解析
如何重新设定时区
Linux中有没有支援 Solairs x86 的档案系统?有的话要如何mount?
MBR如果被覆盖了怎麽办?
如何使用命令trap来捕捉信号?
如何进行增量备份?

Unix/Linux 中的 关于Linux下编写和编译程序的几个问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 150 ::
收藏到网摘: n/a

       关于Linux下编写和编译程序的几个问题
  · 闫健勇·CPCW
  
    当前,虽然Linux还不很普及,在Linux下编写和编译程序的人不多。但是我相信,随着Linux性能的不断提升和逐渐普及,会有许多自由软件出现,也会有许多人成为Linux下的程序员。我结合自己的经验,介绍一下Linux下编写和编译程序所要注意的几个问题,奉献给希望为Linux的发展作出贡献的人们。
  
  
  Linux下怎样编译程序?
  
  大多数Linux程序都是由C语言编写的并由GNU C编译而成。现在GCC是各种发行套件的一部分。有关最新GCC编译器的版本、文章和补丁请看ftp://ftp.gnu.org/pub/gnu/。
  
  由C++编写的程序必须由GNU C++编译,GNU C++也是各种发行套件的一部分,在以上网址也有最新版本和补丁。
  
  编译2.0.x的内核需要2.7.2.x版本的GCC,如用象GCC 2.8.x, EGCS, or PGCC别的编译器编译内核可能产生不可预想的后果。
  
  
  怎样移植其它Unix程序到Linux上?
  
  总得来说,Unix上的程序不需要做改动,只要简单的按照提示就可以移植到Linux上,如果安装过程中出现错误信息,而你又不知道怎么处理,你可以猜或略去,不过这样产生的程序往往带有bug。所以最好还是问一下有经验的人。
  
  如果要从BSD-ish移植程序,试一试在编译时加上-I/usr/include/bsd 和 ?lbsd命令。
  
  
  什么是ld.so,从哪可以找到它?
  
  ld.so是动态函数库装载器。过去,使用共享函数库的程序在原代码开头使用约3K的空间来寻找和加载共享函数库,现在,这段代码被加进了一个特殊共享函数库/lib/ld.so,所有的程序都可以使用该共享库,这样就节省了磁盘空间,而且升级方便。
  
  ld.so可以从以下网址得到tsx-11.mit.edu/pub/linux/packages/GCC/。
  
  
  怎样升级库函数而不使系统崩溃?
  
  注意:进行此操作应该养成做备份的习惯,因为这项操作很容易出错。
  
  如果你升级象libc4这样的老函数库,这个过程会变得非常困难。而且你应该在该系统上让libc4和libc5共存,因为,有些老程序还需要它。升级libc5也一样。
  
  升级动态库的问题常出现在当你移走老的函数库时,用来升级的程序也运行不了了。有许多方法可以解决这个问题。一个方法就是暂时备份一下运行程序所需函数库,它们一般在/lib/、/usr/lib/、 /usr/local/lib/、或其它的地方,在文件/etc/ld.so.conf中都有详细记录。
  
  例如,当你升级libc5时,目录/lib/中有如下文件
  
  libc.so.5
  
  libc.so.5.4.33
  
  libm.so.5
  
  libm.so.5.0.9
  
  这些是C函数库和数学库,拷贝它们到文件/etc/ld.so.conf中含有的其它的目录,如/usr/lib/中:
  
  cp -df /lib/libc.so.5* /usr/lib/
  
  cp -df /lib/libm.so.5* /usr/lib/
  
  ldconfig
  
  一定要记住运行ldconfig来升级函数库的配置文件。
  
  文件libc.so.5 和 libm.so.5是实际库文件的链接文件,当你升级的时候,如果老的链接文件存在,新的链接不会产生,除非你使用CP命令的-f选项。CP的-d选项只复制链接文件,不复制原文件。
  
  如果你需要直接覆盖链接,使用ln命令的选项-f。
  
  例如,拷贝新的库函数覆盖旧的。先对新的函数库做一个链接,然后把函数库和链接一起拷贝到/lib/中,命令如下:
  
  ln -sf ./libm.so.5.0.48 libm.so.5
  
  ln -sf ./libc.so.5.0.48 libc.so.5
  
  cp -df libm.so.5* /lib
  
  cp -df libc.so.5* /lib
  
  重申一下,拷贝完别忘记运行ldconfig.
  
  如果一切工作顺利的话,你可以删除老的函数库的备份。
  
  
  我能否把在486上编译的代码或编译器拿到386上用?
  
  当然,除非你编译的是内核。
  
  GCC用来在486上编译的选项-m486 只是优化了所编译程序,使其运行快一些。这些编译的程序仍能很好的在386