GCC为GNU编译器套件(GNU Compiler Collection),
yum -y install cpp ###cpp为c++库
yum -y install binutils ###二进制工具集,用于创建C库文件和创建静态库
yum -y install glibc ###GNU发布的libc库,即C运行库,其他库都依赖与glibc库
yum -y install glibc-kernheaders
yum -y install gcc ### GNU编译器套件,不仅可处理c语言,也可处理多种语言
yum -y install make ###可能系统不一定自带,最好Yum安装以下
题外话:函数与方法的区别:函数是大家的函数,直接调用可实现相应功能,无需关心数据结构算法以及自己进行编写,即可供大家使用的。方法是类的方法。静态库和动态库就是由大量的函数组成。
这类库的名字一般是 libxxx.a ,扩展名为.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为 如果静态函数库改变了,那么你的程序必须重新编译 。
这类库的名字一般是 libxxx.so,扩展名为.so ;相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。 动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。
/etc/ld.so.conf 是非常重要的一个目录,里面存放的是链接器和加载器搜索共享库时要检查的目录,默认是从 /usr/lib /lib 中读取的 ,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig.此执行程序存放在/sbin目录下.ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,
添加完整路径 #####直接在/etc/ld.so.conf下面加一行/usr/local/mysql/lib
注意事项 1、/lib和/usr/lib不需要添加在文件中,默认已经被加载了
2、添加完整路径比如直接在/etc/ld.so.conf下面加一行/usr/local/mysql/lib
3、ldconfig ###搜索出可共享的动态链接库,进而创建出动态装入程序(ld.so)所需的连接和缓存文件。
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:
tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.
另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.
(1)如果共享库文件安装到了/lib或/usr/lib目录下
ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
(2)如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:
# echo "/usr/local/lib" >> /etc/ld.so.conf
(3)如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下, 但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.
(2)解压后生成目标文件夹。建议mv到对应用户的家目录下,作为软件安装包备份。
预编译,用于设置编译前的参数,比如安装在哪个目录,添加什么功能组件,关闭什么功能组件,添加第三方库的路径等等。可通过-help查看configure参数选项
--prefix(必选) 例子:./configure –prefix=/opt/ffmpeg
只有Prefix参数是必选的,且安装目录建议选择在/opt目录下,原因是:
很多的选项,个人认为,你可以忽略其他的一切,但要把—prefix加上。这里以安装supersparrow-0.0.0为例,我们打算把它安装到目录 /usr/local/supersparrow,于是在supersparrow-0.0.0目录执行带选项的脚本./configure --prefix=/usr/local/supersparrow,执行成功后再编译、安装(make,make install);安装完成将自动生成目录supersparrow,而且该软件所有的文件都被复制到这个目录。为什么要指定这个安装目录?是为了以后的维护方便,如果没有用这个选项,安装过程结束后,该软件所需的软件被复制到不同的系统目录下,很难弄清楚到底复制了那些文件、都复制到哪里去了—基本上是一塌糊涂。
用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。
运行configure脚本,这样可生产出符合GNU规范的Makefile文件。Makefile文件指导make工具如何去自动化编译和链接。
makefile带来的好处就是——"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
编译概念:解释当前的Makefile,完成其中指定的功能(编译程序和链接程序)。将高级语言程序翻译成目标程序,目标程序是计算机可识别的二进制文件。类似于windows的exe文件,输入命令即可直接执行。
Make完成后,没有明显的报错且没有使得编译进程终端,即表示编译成功。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。
编译出来的二进制文件,库,配置文件等等放到相应目录下。比如放到指定的/opt目录下。
清除编译产生的可执行文件及目标文件(object file,*.o)。
环境变量是一个命令仓库,bash会在这里寻找。环境变量中寻找命令只会从当前目录下寻找,不会遍历当前目录的子目录。
一、如果是绝对/相对路径,那么命令直接执行。比如直接执行/bin/ls
通常,软件通过源码包方式安装后,不会自动设置环境变量。那么在运行软件时,需要进入软件的目录再执行,比较麻烦;而设置环境变量后,在任何目录下,输入命令即可运行软件。还有的情况是软件有文件与文件之间的调用,如果不设置环境变量,软件运行可能会报错。所以环境变量非常重要。
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
运行一个脚本,直到end,shell结束,这个就是非交互shell;
(1)用户第一次通过终端ssh连接主机或者"su -"或者通过GNOME登陆输入用户名和密码,会依次执行如下文件:
/etc/profile /etc/profile.d/*.sh /etc/bashrc ~/.bash_profile ~/.bashrc
(2)当用户"su"到一个新用户,或者在GNOME界面新开一个窗口,会依次执行如下文件:
实际上,修改环境变量,在profile和bashrc上设置都是OK的。由于bashrc只要每开一个新窗口就执行一次等的这种特性,最适合用于用户自定义环境。比如bashrc里写echo $PATH 。那么每次切换到特定用户都会显示出特定用户的环境变量,或者存放别名参数等。而profile更适合放置比较重要的参数,比如环境变量。
Vim /etc/profile ###不建议使用,存在安全问题
export PATH="/opt/mycat/bin:$PATH"
export PATH="/opt/zookeeper-3.4.9/bin:$PATH"
####环境变量格式export PATH="????????:$PATH" ????????表示路径
export PATH="/opt/mycat/bin:$PATH"
export PATH="/opt/zookeeper-3.4.9/bin:$PATH"
####环境变量格式export PATH="????????:$PATH" ????????表示路径
source /etc/profile 或者source ~/.bash_profile
source命令也称为"点命令" ,使Shell读入指定的Shell程序文件并依次执行文件中的所有语句。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
/bin/bash作为初始化文件,里面有代码调用bashrc这个文件,所以bashrc也作为初始化文件。当使用source命令时,将初始化文件重新执行以下。
来源:https://www.cnblogs.com/yujiebin/p/10053863.html