免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1014 | 回复: 0
打印 上一主题 下一主题

Linux下安装文件的机制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-04 10:35 |只看该作者 |倒序浏览

                                                有时候,你会觉得:Linux安装文件实在是很麻烦——而且卸载也十分的麻烦?(现在的我几乎不考虑卸载,导致虚拟机只剩下了500M的空间)。但是Linux下安装文件并不是无法可依的,毕竟linux是给程序员用的。程序员要确定头文件,要确定库,安装文件并没有windosws的install shell,它要你把指定的文件放在合适的地方。PS:我们这里讲的是TARBALL,也就是将源代码打包,并且提供下面所说的三种机制的tar.gz或tar.bz2等格式,而不涉及RPM的安装。
一般的步骤是:configure/make/make install这几个步骤一般有什么用呢?
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。
./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
make是用来编译的,它从Makefile中读取指令,然后编译。
make
install
是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
基本上改动的地方时配置的时候,而且基本上改动的地方是--prefix=PREFIX         install architecture-independent files in PREFIX
cs.Phontol.com[/usr/local]
为什么需要改动这个地方呢?这是因为安装到指定目录,这样可以方便使用,而且如果要卸载,把该目录删除即可。*./configureLinux下那么多库,在./configure时时怎么判断它们存不存在的?
通过PKG_CONFIG_PATH定义的路径,一个pkgconfig目录下的.pc文件。这些文件列出了有关于一个库的详细信息。例如:prefix=/usr/localexec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/include/liboil-0.3toolsdir=${exec_prefix}/bin
Name: liboil-0.3Description: Library of Optimized Inner LoopsVersion: 0.3.12Libs: -L${libdir} -loil-0.3 -lmCflags: -I${includedir}
Version:提供了库的版本;Libs:提供了需要的库文件;Cflages:提供了需要的头文件。
pkg-config是相应的系统命令。当我们编译一个使用库的程序的时候,如果手工一一指定需要的库文件和头文件的位置,将是一件很乏味和易错的事情。例如使用gstreamer库的时候,需要(PS:下面的只是作为例子,应该在具体的路径上有错。)-I/usr/local/include/gstreamer-0.10 
(PS:也许这个我们事先可以预料到要包含我们使用的库的头文件)-I/usr/include/glib-2.0 
(PS:也许如果我们知道gstreamer是基于glib,我们也可以预料到这个)-I/usr/lib/glib-2.0/include 
(PS:也许我们知道glib还有一个lib的头文件,还可以预料到这个)-I/usr/include/libxml2(PS:如果你对gstreamer的代码熟悉的话,你可以预料到这个,但是你可能对每个库的代码熟悉吗?)同样的情况对于动态库而言。所以pkg-config提供了这样的机制,方便了我们写程序时使用这个库而获得这个库的gcc选项:pkg-config is a helper tool used when compiling applications
and libraries. It helps you insert the correct compiler options on the command
line so an application can use
 gcc -o test test.c `pkg-config --libs --cflags glib-2.0`  for
instance, rather than hard-coding values on where to find glib (or other
libraries). It is language-agnostic, so it can be used for defining the location
of documentation tools, for instance. 
这样使用脚本,可以方便的使用库文件:#!/bin/shexport TARGET=hello.outexport SOURCE=hello.cexport PKG0=gstreamer-0.10export USEPKG0=`pkg-config --libs --cflags $PKG0` echo `pkg-config --libs --cflags $PKG0` export CC=gcc$CC $OPT -Wall -o $TARGET $SOURCE $USEPKG0
PS:要确定一个包的名字,例如:pkg-config --list-all|grep gstreamer
前面说过.pc文件提供了版本信息,因为./configure有时候需要检查库的版本是否足够。
安装动态库之后,本来系统默认的编译时使用的动态链接库的路径只会使用/lib和/usr/lib这两个目录下的库文件如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0
>= 2.4.0,如果没有指定 --prefix=/usr
这样glib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib,运行的时候会报错:找不到xx库。解决方法是在/etc/ld.so.config中添加/usr/local/lib然后ldconf不过现在我这里出现了not a symbol linkd的问题?待续。。。
               
               
               
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93494/showart_1917495.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP