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

Unix/Linux
linux查看内存的大小
在linux下写的代码,用的是utf-8,结果拿到XP下运行的时候,所有的中文都成乱码
linux su和sudo命令的区别
linux cron 下的定时执行工具使用技巧
linux 查找进程及终止进程操作的相关命令
redhat linux 安装 gcc编译器
Linux Mplayer播放各种格式的电影
一起回顾一下linux常用命令
Linux 网站项目发布要做哪些配置
linux SSH配合SecureCRT的密匙完美使用方法
GD 编译出错解决方法
Facebook Open Platform编译FAQ
Linux 系统硬盘 优化
linux 挂载详解
linux crontab定时命令
Linux 系统中确保访问三级域名畅通的方法
Linux 特权帐号VS普通帐号
确保Linux系统安全的前提条件 漏洞防护
Linux 监视系统资源使用率
Red Hat Linux上使用BIND建立DNS服务器

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 100 ::
收藏到网摘: 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