在Linux下发布程序需要注意版本的软件包有哪些呢?
gcc是GNU编译器集合,包含C、C++、Java、Ada、Fotun等编译器,我们主要使用的是C和C++,它们对应的程序是gcc和g++,为了兼容BSD等UNIX系统,C编译器的程序名还可以是cc或CC。
Linux的一切都是由gcc编译完成的,由于不同主版本的gcc的ABI并不完全相同,因此,如果Linux系统与应用程序采用不同主版本号的gcc进行编译,很可能产生非常多的问题。
查看gcc版本的方法是gcc -v。
注意,这里不但可以显示出gcc的版本,还会显示出gcc的编译参数,这也非常重要,即使是相同版本的gcc,在使用不同的编译参数时也会产生兼容问题,比如线程模型。
Glic glic是Linux的标准库函数,封装了Linux的绝大多数的系统调用,相当于Windows的API,所有应用软件都要依赖于它。
他的主版本发生改变时,它所提供的函数行为可能发生加大改变,基于不同glic版本的程序在混合使用时,经常会出现段错误。
查看glic的版本的方法有两种。
一种是Linux系统的软件包以RPM方式发布,可以利用pm -q glic命令查看所安装的glic是什么版本,文件名后面的数字就是版本数字。
另外就是查看li目录下下的lic-x.y.z.so文件,x、y、z就标明了主版本、副版本和修正版本。
Kenel 内核是Linux的核心,Linux的一切功能都有内核提供,而不同的内核版本会有很大的变化,比如2.4.x和2.6.x内核区别非常大,可以说它们完全不兼容。
另外,即便都是2.6.x的内核,不同的修正版本也会存在较大差异,也很可能产生兼容问题。
各大发行版Linux软件包管理速查表是什么
使用 Linux 系统总是免不了要接触包管理工具。
比如,Debian/Ubuntu 的 apt、openSUSE 的 zypp、Fedora 的 yum、Mandriva 的 urpmi、Slackware 的 slackpkg、Archlinux 的 pacman、Gentoo 的 emerge、Foresight 的 conary、Pardus 的 pisi,等等。
DistroWatch 针对上述包管理器的主要用法进行了总结,对各位 Linux 用户来说具有很好的参考作用。
这个总结还是有一点不足,有空给大家整理一个更全面的版本。
任务aptDebian, UbuntuzyppopenSUSEyumFedora, CentOS安装包apt-get install zypper install yum install 移除包apt-get remove zypper remove yum erase 更新包列表apt-get updatezypper refreshyum check-update更新系统apt-get upgradezypper updateyum update列出源cat /etc/apt/sources.listzypper reposyum repolist添加源(edit /etc/apt/sources.list)zypper addrepo (add to /etc/yum.repos.d/)移除源(edit /etc/apt/sources.list)zypper removerepo (remove from /etc/yum.repos.d/)搜索包apt-cache search zypper search yum search 列出已安装的包dpkg -lrpm -qarpm -qa任务urpmiMandrivaslackpkgSlackwarepacmanArch安装包urpmi slackpkg install pacman -S 移除包urpme slackpkg remove pacman -R 更新包列表urpmi.update -aslackpkg updatepacman -Sy更新系统urpmi --auto-selectslackpkg upgrade-allpacman -Su列出源urpmq --list-mediacat /etc/slackpkg/mirrorscat /etc/pacman.conf添加源urpmi.addmedia (edit /etc/slackpkg/mirrors)(edit /etc/pacman.conf)移除源urpmi.removemedia (edit /etc/slackpkg/mirrors)(edit /etc/pacman.conf)搜索包urpmf --pacman -Qs 列出已安装的包rpm -qals /var/log/packages/pacman -Qii任务conaryrPatd, ForesightpisiPardusemerge Gentoo安装包conary update pisi install emerge 移除包conary erase pisi remove emerge -C 更新包列表pisi update-repoemerge --sync | layman -S [for added repositories]更新系统conary updateallpisi upgradeemerge -NuDa world列出源pisi list-repolayman -L添加源pisi add-repo layman -a移除源pisi remove-repo layman -d 搜索包conary query pisi search emerge --search列出已安装的包conary querypisi list-installedcat /var/lib/portage | more
为什么我的linux每次读取软件包到99%就不能
与SP2的增强安全性设置有关。
方法:Internet选项→安全→自定义级别→在“下载”栏各选项中全部选择“启用”,然后切换至“高级”选项卡,在“安全”栏中取消对“检查下载的程序的签名”复选框的选中,选中“允许运行或安装软件,即使签名无效”复选框。
...
linux安装本地软件包命令有哪些
在Red Hat Linux下,标准的软件包是通过RPM来进行管理的。
RPM的全名是Red Hat Package Manager,从名字就知道,它是由Red Hat公司开发的软件包管理系统。
使用RPM软件包管理系统有下面这些优点: 1. 安装、升级与删除软件包都很容易 2. 查询非常简单 3. 能够进行软件包的验证 4. 支持源代码形式的软件包 下面的说明,将充分体现出以上四个优点。
RPM软件包通常是以xxx.rpm的格式命名的,就好像HP-UX下标准的软件包是xxx.depot的形式一样。
一般,一个标准的RPM软件包的名字能够告诉我们一些信息,例如rhviewer-3.10a-13.i386.rpm,从这样一个名字的RPM软件包,我们可以知道,软件的名称是rhviewer,版本是3.10a,次版本是13,运行的平台是i386。
RPM通常有5种方式来管理RPM软件包:安装、删除、升级、查询和验证。
1. 安装 #rpm -ivh rhviewer-3.10a-13.i386.rpm 其中使用到的参数ivh说明如下: i: 使用RPM的安装模式 v: 在安装的过程中显示安装的信息 h: 在安装的过程中输出#号 另外,RPM还能够通过FTP来进行远程安装,形式其实和本地安装差不多,只要在文件名的前面加上适当的路径就可以了: #rpm -ivh ftp://xxxx/rhviewer-3.10a-13.i386.rpm 注意:对于远程安装来说,建议不要忘记h参数,不然可能不知道安装程序是否还在进行。
或者,也可以通过--percent参数来知道安装的进度。
对于详细帮助信息,可以通过#rpm --help或者#man rpm来获得。
在安装过程中,可能会经常遇到以下几种情况: 重复安装软件包 如果要安装的软件之前已经安装过,就会在安装过程中出现以下错误信息: #rpm -ivh rhviewer-3.10a-13.i386.rpm package rhviewer-3.10a-13 is already installed 如果确定重新安装一次,可以加上--replacepkgs参数: #rpm -ivh --replacepkgs rhviewer-3.10a-13.i386.rpm 软件包中用到的某个文件已经被其他软件包安装 这种情况可能最常出现,多个软件包都包含某个或某些文件,当安装了第一个软件包,再安装其他软件包的时候,就会出现以下错误: #rpm -ivh rhviewer-3.10a-13.i386.rpm rhviewer /usr/bin/rhviewer conflicts with file from msviewer-1.10b-01 error: rhviewer-3.10a-13.i386.RPM cannot be installed 此时,可以用--replacefiles参数: #rpm -ivh --replacefiles rhviewer-3.10a-13.i386.rpm 软件包之间的相关性 有的时候,一个软件包的作用要基于另外一个软件包,如果安装该软件包时候没有安装需要的另外一个软件包,就会有错误信息: #rpm -ivh rhviewer-3.10a-13.i386.rpm failed dependencies: rhviewer is needed by rhpainter-2.24-20 此时,建议先安装这个需要的软件包。
不过,如果你愿意尝试一下是否不安装这个需要的软件包是否也能够正常使用你真正要安装的软件的话,可以加上--nodeps参数: #rpm -ivh --nodps rhviewer-3.10a-13.i386.rpm 2. 删除 #rpm -e rhviewer 注意:这里接的不是安装时候软件包的名字rhviewer-3.10a-13.i386.rpm,而只要用rhviewer或者rhviewer-3.10a-13就可以了。
建议的方式是先用RPM查询出你要删除的软件,然后用该命令删除。
这里最常出现的错误提示就是,当你要删除的软件包被其他软件包关联时候,就会出现错误提示: #rpm -e rhviewer removing these packages would break dependencies: rhviewer is neededby rhpainter-2.24-20 3. 升级 更新软件包的版本到最新版本,也是经常用到的: #rpm -Uvh rhviewer-3.10a-13.i386.rpm 升级软件的模式其实是先删除旧软件包,然后再安装新软件包。
而且,你还可以选择用这种升级的模式来安装软件包,因为,没有旧软件包的情况下,此升级方式仍然可正常运行。
如果系统中有旧版本存在,你就可以看到以下信息: #rpm -Uvh rhviewer-3.10a-13.i386.rpm saving /etc/rhviewer.conf as /etc/rhviewer.conf.rpmsave 如果,你要降低当前版本到更老的版本,一个办法就是删除该版本,然后再重新安装旧的版本,也可以用--oldpackage参数来进行“升级”: #rpm -Uvh --oldpackage rhviewer-3.10a-13.i386.rpm 补充说明: 还有一种升级的安装方式:更新。
#rpm -Fvh rhviewer-3.10a-13.i386.rpm 更新和普通升级的方式是,当系统中没有旧版本时,普通的升级安装仍然会安装该软件,而更新的模式就不会安装。
4. 查询 #rpm -q rhviewer rhviewer-3.10a-13 如果要查询的软件忘记了名字,可以用#rpm -qa来显示出所有的已经安装的软件。
更详细的软件信息,可以用#rpm -qi来查询。
5. 验证 #rpm -V rhviewer 说明:验证rhviewer软件包的正确性 #rpm -Vf /bin/vi 说明:验证包含/bin/vi文件的软件包 #rpm -Va 说明:验证所有软件包 #rpm -Vp rhviewer-3.10a-13.i386.rpm 说明:使用.rpm文件来验证软件包的正确性 验证模式会比较原始软件包信息及安装在系统中的软件包文件信息,包括每个文件的大小、MD5 checksum、权限、类型、拥有者及所属的文件组。
在验证后若没有任何输出,表示软件包正常。
如果有不一致的地方,RPM将会显示出它们的错误码。
下面列出一些可能的错误码: 5: MD5校验码不匹配 S: 文件大小不匹配 L: 符号连接错误 T: 文件修改时间不匹配 D: 设备属性不匹配 ...
如何在linux下安装软件包
展开全部 不管是初步跨入Linux殿堂的新手,还是具有多年经验的专家,在安装或编译软件包的过程中或多或少的都会遇到包的依赖问题,从而导致安装过程无法继续,比如管理员在安装LAMP时,包需要libgd.so文件,而这个文件属于GD软件包。
但是在安装GD软件包时,可能这个软件包跟其他软件包又具有依赖关系,又需要安装其他软件包才行。
这时有的管理员便失去耐心。
在遇到这种Linux软件包依赖关系问题时,该如何解决呢?在谈这个具体的措施之前,先跟大家聊聊Linux系统里的软件依赖性问题。
一、什么是依赖性 程序依赖于程序代码的共享库,以便它们可以发出系统调用将输出发送到设备或打开文件等(共享库存在于许多方面,而不只局限于系统调用)。
没有共享库,每次程序员开发一个新的程序,每个程序员都需要从头开始重写这些基本的系统操作。
当编译程序时,程序员将他的代码链接到这些库。
如果链接是静态的,编译后的共享库对象代码就添加到程序执行文件中;如果是动态的,编译后的共享库对象代码只在运行时需要它时由程序员加载。
动态可执行文件依赖于正确的共享库或共享对象来进行操作。
rpm依赖性尝试在安装时强制实施动态可执行文件的共享对象需求,以便在以后当程序运行时不会有与动态链接过程有关的任何问题。
注意:还有一种类型的依赖性,它基于显式的条目,rpm通过程序员将该依赖性强加到rpm配置文件中,但目前我们不关心这种类型的依赖性,这种依赖性比较容易解决。
这里将重点放在rpm强制实施的更加复杂的共享对象依赖性。
二、动态可执行文件和共享对象 动态可执行文件使用最初编译和链接程序时使用的库文件的共享对象名称来查找共享对象。
它们在少数的几个标准位置查找,比如在/lib和/usr/lib目录及在LD_LIBRARY_PATH环境变量(主要用于指定查找共享库,比如我们在安装Oracle时指定路径,exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib)指定的目录中。
顺便提一下,在这些库目录中找到的共享对象可能不是真正的文件;它们可能是指向位于其他位置的真实库文件的符号链接(但通常仍旧在标准库目录的一个目录中)。
至少从系统管理员的观点是在用于创建共享库文件的共享库软件包的名称和共享库文件的名称之间通常没有什么关系。
例如,GLIBC2.3软件包用于创建libc.so.6共享库文件。
也从本示例中注意到,添加到共享库文件名结束的版本号(.6)跟用于创建它的版本号(2.3)没有关系。
这是由共享库软件包开发人员有意完成的,以便GLIBC的新版本可以重用相同的共享库文件名libc.so.6。
这允许您在系统上加载新版本的GLIBC,而不用中断动态链接到lib.so.6共享库文件的所有程序,当然假定新版本的GLIBC向后与动态可执行文件最初所链接的老版本GLIBC兼容。
因此,即使库文件或共享对象文件有与它们相关的版本号,这些版本号也不能帮助你确定他们来自哪个版本的共享软件包。
注意:当将whatprovides选项用于rpm查询命令时,可以获得有关使用rpm软件包加载到系统的现有共享对象的信息。
这种混乱是由下面的事实造成的:单个共享库文件可能支持某个范围的共享库软件包版本。
例如,要检查soname库文件/lib/libc.so.6支持的GLIBC共享库软件包,运行下面的命令: #objdump--all-headers/lib/libc.so.6|less 向下滚动此报告,直到到达Versiondefinitions:部分,以便查看libc.so.6共享库文件支持哪些GLIBC版本: Versiondefinitions: 10x010x0865f4e6libc.so.6 20x000x0d696910GLIBC_2.0 30x000x0d696911GLIBC_2.1 GLIBC_2.0 40x000x09691f71GLIBC_2.1.1 GLIBC_2.1 50x000x09691f72GLIBC_2.1.2 GLIBC_2.1.1 60x000x09691f73GLIBC_2.1.3 GLIBC_2.1.2 70x000x0d696912GLIBC_2.2 GLIBC_2.1.3 80x000x09691a71GLIBC_2.2.1 GLIBC_2.2 90x000x09691a72GLIBC_2.2.2 GLIBC_2.2.1 100x000x09691a73GLIBC_2.2.3 GLIBC_2.2.2 110x000x09691a74GLIBC_2.2.4 GLIBC_2.2.3 120x000x09691a76GLIBC_2.2.6 GLIBC_2.2.4 130x000x0d696913GLIBC_2.3 GLIBC_2.2.6 140x000x09691972GLIBC_2.3.2 GLIBC_2.3 150x000x09691973GLIBC_2.3.3 GLIBC_2.3.2 160x000x09691974GLIBC_2.3.4 GLIBC_2.3.3 170x000x0d696914GLIBC_2.4 GLIBC_2.3.4 180x000x0d696915GLIBC_2.5 GLIBC_2.4 190x000x0963cf85GLIBC_PRIVATE GLIBC_2.5 200x000x0b792650GCC_3.0 在本示例中,1ibc.so.6共享库文件支持原先为GLIBC版本2.0到2.5而开发的所有动态执行文件。
注意:也可以使用objdump命令来从共享库文件中提取soname,命令如下所示: #objdump--all-headers/lib/libcrypto.so.0.9.8b|grepSONAME SONAMElibcrypto.so.6 objdump:/lib/libcrypto.so.0.9.8b:norecognizeddebugginginformation 接下来,将讨论rpm软件包是如何生成的,以便在新系统上安装rpm软件包时,这些共库依赖性是己知的。
三、Rpm软件包和共享库依赖性 当程序员生成rpm软件包时,ldd命令用于报告动态可执行文件软件包中所有动态可执行文件使用的所有共享库。
另...
linux上安装软件包都做了哪些工作
Linux上的安装包有预编译安装包和源代码安装包。
预编译安装包就是把编译好的可执行程序、动态链接库、缺省的运行参数等全部打包成一个文件里了,你执行安装程序的时候,安装程序会按照各个文件应该放置的位置给你放置好,你就可以直接调用了。
源代码安装包就是把编译那套软件需要的所有源代码按照它们应该存放的位置存放在一个目录树内,然后用tar之类的打包工具和gzip之类的压缩工具把整个目录树做成了一个文件,你下载来以后解包、解压缩就可以还原出那个目录树来,在目录树的根部执行配置命令 "./configure" 和 “make”命令后就可以用“make install”命令将它安装到正确的位置上。
转载请注明出处51数据库 » linux软件包签名
我的大剑已经饥渴难耐