库:程序代码的集合,是共享程序代码的一种方式(库分为开源库和闭源库)
为什么c/c++开源库使用前需要编译:直接将第三方库的源代码包含到当前程序的代码中编译是效率非常低下的方式,实际中除非极特殊情况,不会考虑使用这种方式,而是将开源库源代码编译成二进制的动态链接库,其他程序要使用其中的API时,只需要指定动态链接库的入口点,程序运行时加载动态链接库 并找到其中的函数入口点就可以调用开源库API。
闭源库:不公开源代码,只公开接口,看不到具体实现,比如高德地图,环信即时通讯等的SDK.(闭源库分为静态库和动态库)
静态库:以".a"或".framework"为文件后缀名,静态库链接时会被完整的复制到可执行文件中,被多次使用就有多次拷贝
动态库:以".dylib"或".framework"为文件后缀名,动态库链接时不复制,程序运行时由系统动态加载到内存,供程序调用。而且系统只加载一次,多个程序共用,节省内存。
去网上找了第三方开源库。可是下载下来里面都是源码,没有动态库或者静态库,所以就需要自己去编译生成。源码库中只有一个configure的可运行得配置脚本,首先让我们先来了解一下configure这个文件的作用。Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后再安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Configure脚本配置工具就是基础之一,它是autoconf的工具的基本应用。即利用 GNU Autoconf 及 Automake 这两套工具来协助我们自动产生 Makefile 文件, 并且让开发出来的软件可以像大多数源码包那样,只需"./configure", "make","make install" 就可以把程序安装到系统中。automake设置了默认的安装路径:默认安装路径为:$(prefix) = /usr/local(
用户自己编译的软件默认会安装到这个目录下。这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。)
,可以通过./configure --prefix=<new_path>
的方法来覆盖。对于安装的情况,库将会安装到$(prefix)/lib
目录下,可执行文件将会安装到${prefix}/bin。
我们编译安装一个由 GNU Autoconf 配置的程序是采用如下的步骤:
./configure && make && make install
Linux下有两种库:动态库和静态库(共享库)
二者不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已被载入可执行程序(二进制文件)(编译时库文件需通过-L参数传递给编译器)因此拥有静态函数库的软件较为庞大。程序运行时将不再需要该静态库,因为所有使用的函数都已经被编译进去了,即拥有静态函数库的软件可以独立运行。如果静态函数库改变了,那么你的程序必须重新编译才能正常使用。 这是非常麻烦的! 动态库(共享库)的代码在可执行程序运行时才载入内存,函数库没有被整合进你的程序,因此程序的运行环境还需要提供动态库,在编译时仅仅将函数库的路径整合到软件的二进制文件中去。由于软件中包含的是函数库的路径(动态库链接时,它只是保留接口,这样可提高代码的可复用度。),因此该软件无法独立运行,且函数库的路径不能发生变化,一旦变化,该软件将无法找到函数库,从而无法运行!这是动态函数库的最大缺点。但当动态函数库更新时,软件无需重新编译,因此更新较为方便,这是动态函数库的最大优点。目前大部分软件均使用动态函数库,就是因为动态函数库在更新时体现出的优势。
静态库名字一般是libxxx.a
动态库名字一般是libxxx.so
linux上可以选择从源代码安装和只安装库文件两种方式。从源代码安装是指从OpenCV官网中下载相应版本的OpenCV源码,然后使用cmake命令中编译安装,好处是可以选择的版本比较丰富,而且可以看到源代码;只安装库文件,是指安装由Ubuntu社区人员编译好的库文件,这样就无需重新编译一遍。
源码包的缺点:因为是编译安装,安装过程中一旦报错新手很难解决源码包的优点是开源,如果有足够的能力,可以修改源代码。软件是编译安装,所以更加适合自己的系统。
二进制包(RPM包、系统默认包)缺点:经过编译,不再可以看到源代码
Yum安装可以自动解决库依赖问题,所以推荐使用。
source code 是程序员跑的码, binary code 是机器跑的代码。 source code 得经过 compile 才能成為 binary code 。
CentOS7主要有rpm和yum这两种包软件的管理。RPM 有分兩种:binary rpm 跟 source rpm 。 前者是編好的 binary ,安裝就可用。 后者是还沒編好的 source ,需 rebuild 之後才能安裝。rpm格式很好区分,二进制格式的包名字很长,都带有版本号、适应平台、适应的硬件类型等,而源码格式仅仅就是一个版本号的tar包。mysql-5.0.45.tar.gz 是 源码包 像这样的 mysql-5.0.45-linux-x86_64-glibc23.tar.gz 是二进制包。
Linux安装方式有两种,YUM安装(yum方式安装:(安装rpm包),rpm最早由RedHat公司提出的软件包标准,后来随着rpm的不断发展而又增加许多功能,逐渐的成为linux公认的软件包管理标准。 Yum(全称为 Yellow dogUpdater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。而且现在的发行版都有自己的包管理器,比如apt(apt方式安装:(安装deb包)rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统, 且还能自动处理包与包之间的依赖问题,这个是rpm 工具所不具备的。)或yum,一个命令就可以从源下载软件,还可以自动解决依赖问题。)和源代码安装方式。推荐使用YUM安装方式。众做周知RedHat Linux使用RPM包管理器安装rpm包,但是RPM包是由红帽编译打包的,通常相对于最新版落后了很多,甚至可能缺少我们所要使用的功能。如果你需要定制想要的软件功能、自定义安装路径、体验最新版等,你就需要自己动手编译安装源码包了。
而且对于Linux初学者来说,安装 软件是一件很让人头疼的事情。由于很多Linux应用软件都是以源代码的形式发布的,这就要求用户根据自己系统的实际情况和自身的需要来配置,编译源程序 后,才能使用这些软件,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。目前流行的软件包有两种比较常见的形式,一种是以 RPM、deb包为代表的智能软件包,另一种是file.tar.gz形式的压缩。本文将讨论file.tar.gz的安装方法以及智能软件包在文本环境和图形环境下的安装方法。
一.源代码安装(查看INSTALL与README文件,这两个文件中详细介绍了本软件的安装方法和注意事项。其实在解压完一个包后,打开文件夹可以找到INSTALL 或者README 文件 里面才是详细的安装步骤!!!):应用软件的源代码一般是file.tar.gz或者file.tgz格式,进入解压完成之后新建立的目录,一般的应用软件中都有一个用来配置软件的可执行文件——configure,Configure脚本配置工具就是基础之一,它是autoconf的工具的基本应用。源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。Configure是一个可执行脚本(./configure的作用是检测系统配置,生成makefile文件),它有很多选项(参数),当 然,安装不同的软件参数也不相同,具体有些什么参数,在待安装的源码路径下使用命令./configure –-help输出详细的选项列表。例如./configure --prefix=/usr/local/mysql(表示设置软件的安装目录为:/usr/local/mysql,可以把所有资源文件放在/usr/local/mysql的路径中,不会杂乱。)。(其中--prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱。