1操作环境

  通过命令查看操作系统版本信息:

[root@localhost ~]# cat /proc/version
Linux version 3.10.0-327.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015

  查看当前操作系统发行版本信息:

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

  我的操作系统上没有安装gcc(这是按照我这种办法来安装gcc的前提),从操作系统安装镜像中取出需要的rpm包来安装gcc(此部分转载自:https://www.cnblogs.com/sybblogs/p/5717392.html),我的操作系统发行版本是CentOS 7.2.1511,从http://vault.centos.org/找到我的对应我的操作系统的镜像,所需要的rpm都放在了一个叫做packages的目录下,最终能取到我所需要的包的完整URL是:http://vault.centos.org/7.2.1511/os/x86_64/Packages/   。这个目录下有非常多的包,你可以使用快捷键Ctrl+F来查找你需要的包。

  接下里在你的操作系统上创建一个目录,用来在使用wget命令下载rpm包的时候保存下载下来的文件。使用这种方式需要如下包:

mpfr-3.1.-.el7.x86_64.rpm
libmpc-1.0.-.el7.x86_64.rpm
kernel-headers-3.10.-.el7.x86_64.rpm
glibc-headers-2.17-.el7.x86_64.rpm
glibc-devel-2.17-.el7.x86_64.rpm
cpp-4.8.-.el7.x86_64.rpm
gcc-4.8.-.el7.x86_64.rpm
gcc-c++-4.8.-.el7.x86_64.rpm

  所有这些包都下载好以后,按照如下顺序安装这些包:

rpm -ivh mpfr-3.1.-.el7.x86_64.rpm
rpm -ivh libmpc-1.0.-.el7.x86_64.rpm
rpm -ivh kernel-headers-3.10.-.el7.x86_64.rpm
rpm -ivh glibc-headers-2.17-10.el7.x86_64.rpm
rpm -ivh glibc-devel-2.17-.el7.x86_64.rpm
rpm -ivh cpp-4.8.5-4.el7.x86_64.rpm
rpm -ivh gcc-4.8.5-4.el7.x86_64.rpm

  或者也可以如下命令统一安装:

rpm -Uvh *.rpm --nodeps --force

  安装结束之后,使用gcc -v 来查看gcc的版本以及使用g++ --version查看g++的版本(当然是4.8.5咯)

[root@localhost gcc]# g++ --version
g++ (GCC) 4.8. (Red Hat 4.8.-)
Copyright © Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。

  卸载系统自带的python以及重新安装。

  卸载时依次执行以下几条命令:

[root@test ~]# rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##强制删除已安装程序及其关联
[root@test ~]# whereis python |xargs rm -frv ##删除所有残余文件 ##xargs,允许你对输出执行其他某些命令
[root@test ~]# whereis python ##验证删除,返回无结果

  创建目录用以保存python相关的包:

mkdir /usr/local/src/python

  进入该目录,并使用wget命令下载如下包:

python-2.7.-.el7.x86_64.rpm
python-iniparse-0.4-.el7.noarch.rpm
python-pycurl-7.19.-.el7.x86_64.rpm
python-devel-2.7.5-34.el7.x86_64.rpm
python-libs-2.7.5-34.el7.x86_64.rpm
python-urlgrabber-3.10-7.el7.noarch.rpm
rpm-python-4.11.3-17.el7.x86_64.rpm

  创建目录保存yum的相关包:

mkdir /usr/local/src/yum

  使用wget命令下载下列包,保存到刚创建好的yum目录下:

yum-3.4.-.el7.centos.0.1.noarch.rpm
yum-metadata-parser-1.1.-.el7.x86_64.rpm
yum-plugin-fastestmirror-1.1.-.el7.noarch.rpm
(前三个是必须的,大多数帖子上都只有前三个)

  安装python,yum的安装依赖python。

  安装Python的命令:(在目录/usr/local/src/python  就是刚才保存了python相关包的目录,下执行这条命令)

rpm -Uvh --replacepkgs python*.rpm

  安装结束后,在终端输入python,即可看到python的版本信息。

  安装Yum的命令:(把刚才下载好的yum相关的包也移动到/usr/local/src/python目录下,然后再执行这条指令):

rpm -Uvh --replacepkgs rpm-python*.rpm yum*.rpm

  OK,至此,yum就安装完成了,可以在终端输入yum来验证一下。 

注:如果使用wget下载的时候提示域名解析失败,可以执行命令 vim /etc/resolv.conf(这个是DNS服务器配置配置文件) ,在文件中添加如下几行:

nameserver 127.0.0.1
nameserver 8.8.8.8
nameserver 114.114.114.114

一.ocilib库的编译

 1.简介

  源码下载地址:https://github.com/vrogier/ocilib/releases/。本次编译下载的版本是:V4.6.0(Source Code(tar.gz))。这个库的使用还需要用到oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm(这是在Oracle官网上下载的,我博客另一篇帖子里有说怎么安装Oracle的客户端,只要按照讲的操作把这个rpm包也安装好即可)。

  C/C++访问数据库的主要方式有四种:ADO、ODBC、PRO*C、OCI,ADO和ODBC是通用方法,编程简单但是速度相对较慢。OCI和PRO*C是Oracle公司提供的专门的开发工具,访问速度很快,适合实时性要求较高的工程。OCI即Oracle call interface,是Oracle提供的一个C接口,它访问速度快但是接口众多,编程复杂。OCILIB则是对OCI的封装,接口相对简单,适合快速编程。

  使用OCILIB库,首先要安装Oracle客户端:oracle-instanclient,它提供了客户端代码库(libclntsh.so.11.1)和Oracle C++调用接口库(libocci.so.11.1)

2.生成makefile文件

  使用tar -zxf ocilib4.6.0.tar.gz 解压后得到目录 ocilib4.6.0,进入该目录,在bash中输入 ./configure 直接执行的话,会提示找不到头文件。

checking for Oracle home... defined by environment : /usr/lib/oracle/11.2/client64
checking for Oracle OCI headers location... configure: error: variable not set or unable to guess

  正确的输入办法应该是(总算找到一个可以用的了):

./configure --with-oracle-lib-path=/usr/lib/oracle/11.2/client64/lib --with-oracle-headers-path=/usr/include/oracle/11.2/client64 CFLAGS="-O2 -m64"

  上面的输入语句,其中with是用来指定ocilib所需要的头文件和库文件的位置,CFLAGS="-O2 -m64" 的意思是生成的是64位的库,整个命令的作用是生成makefile文件,为下一步的编译做准备。

3.make

  这是linux的一个命令(或者你把它认为是工具程序也可以,目标就是解析makefile文件,并执行其中的规则),使用make来编译源码。

  但是我使用了make之后,提示错误,原因我想应该是生成makefile文件在编译array.c的时候没有加-std=c99这个参数。

[root@localhost ocilib-4.6.]# make
make all-recursive
make[]: 进入目录“/root/CppProject/OpenSourceLibrary/ocilib-4.6.”
Making all in doc/html
make[]: 进入目录“/root/CppProject/OpenSourceLibrary/ocilib-4.6./doc/html”
make[]: 对“all”无需做任何事。
make[]: 离开目录“/root/CppProject/OpenSourceLibrary/ocilib-4.6./doc/html”
Making all in src
make[]: 进入目录“/root/CppProject/OpenSourceLibrary/ocilib-4.6./src”
/bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I/usr/include/oracle/11.2/client64 -I../include -DOCI_IMPORT_LINKAGE -DOCI_CHARSET_ANSI -O2 -m64 -MT libocilib_la-array.lo -MD -MP -MF .deps/libocilib_la-array.Tpo -c -o libocilib_la-array.lo `test -f 'array.c' || echo './'`array.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I.. -I/usr/include/oracle/11.2/client64 -I../include -DOCI_IMPORT_LINKAGE -DOCI_CHARSET_ANSI -O2 -m64 -MT libocilib_la-array.lo -MD -MP -MF .deps/libocilib_la-array.Tpo -c array.c -fPIC -DPIC -o .libs/libocilib_la-array.o
array.c: 在函数‘OCI_ArrayInit’中:
array.c::: 错误:只允许在 C99 模式下使用‘for’循环初始化声明
for (unsigned int i = ; i < arr->nb_elem; i++)
^
array.c::: 附注:使用 -std=c99 或 -std=gnu99 来编译您的代码
array.c: 在函数‘OCI_ArrayClose’中:
array.c::: 错误:只允许在 C99 模式下使用‘for’循环初始化声明
for (unsigned int i = ; i < arr->nb_elem; i++)
^
make[]: *** [libocilib_la-array.lo] 错误
make[]: 离开目录“/root/CppProject/OpenSourceLibrary/ocilib-4.6./src”
make[]: *** [all-recursive] 错误
make[]: 离开目录“/root/CppProject/OpenSourceLibrary/ocilib-4.6.”
make: *** [all] 错误

  查了一下,在makefile中也没找到对应的规则,闲着没事打开INSTALL文件看了一下,发现了这个问题的解决办法。

[root@localhost ocilib-4.6.]# ls
aclocal.m4 ChangeLog config.h.in configure demo images libtool Makefile NEWS proj README.MD src THANKS
acocilib.m4 config config.log configure.ac doc include LICENSE Makefile.am ocilib.pc README reconf stamp-h1 VERSION
AUTHORS config.h config.status COPYING doxygen INSTALL m4 Makefile.in ocilib.pc.in README.in scripts tests

  好了,按照INSTALL给出的建议,重新写./configure的执行参数。

./configure --with-oracle-lib-path=/usr/lib/oracle/11.2/client64/lib --with-oracle-headers-path=/usr/include/oracle/11.2/client64 CC=c99 CFLAGS="-g -O2 -m64" --prefix=/root/CppProject/include/ocilib/ --exec-prefix=/root/CppProject/library/ocilib/

  CFLAGS 这里填写的是编译器选项,-g表示编译为debug版本,-O2,优化等级为2,-m64,表示这是64位的程序库,CC=c99,表示用gcc编译的时候编译命令里加上 -cc=c99这个参数。我想要的是C++版本动态

4.安装 make install

  在终端中输入make install命令即可,这样它会把编译好的头文件和库文件放到你在configure脚本执行过程中--prefix 和 --exe-prefix参数指定的目录中。

补充:

  在有的机器上执行make的时候可能会遇到这样的问题(事实上,我在虚拟机上安装了操作系统,从github上克隆了代码,就碰到了):

WARNING: 'aclocal-1.15' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>

  这个会导致make失败。查看了一下我的automake版本是1.13,所以问题就是没满足它的要求的1.15版本了。查看当前automake版本的命令是:automake --version

  解决办法:

  1.下载安装包:automake-1.15.tar.gz

wget https://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz

  2.解压

tar -zxvf automake-1.15.tar.gz

  3.配置

./configure --prefix=/usr

  4.make & 安装

make
make install

  上述4步做完之后,在转到ocilib源码所在目录执行make命令即可。

二、Google Glog在linux下的编译

  源代码下载地址:https://github.com/google/glog

git clone https://github.com/google/glog.git

  有很多个release版本,可以使用git tag查看所有的版本,所谓tag就是指给对应的commit对象起的别名。所以可以使用git checkout切换到你想要的版本,我使用比我写这篇博客时老一个版本的源码编译。切换版本(更新的版本需要先执行脚本autogen.sh,作用是生成configure脚本):

git checkout v0.3.4

  然后进入glog目录,执行脚本configure,configuer的参数可以参考编译ocilib时给定的参数,这样可以指定make install指定的安装路径。CXXFLAGS指定带调试符号。

./configure --prefix=/home/CppProject/include/glog --exec-prefix=/home/CppProject/library/glog CXX=g++ CXXFLAGS="-g"

  这时候可能会报错,因为v0.3.4版本,要求automake的版本是1.14。可以按照上一节讲的更新为automake1.15的办法更新为1.14版本。更新好之后,执行make命令,可能还会报错,具体错误是缺少"test_driver”,解决办法:

automake --add-missing

  它会自动安装缺少的东西,接下来再执行make就没有问题了,然后make install。

make install

三、tinyxml2在linux下的编译

  源码下载地址:https://github.com/leethomason/tinyxml2

  编译过程:这里只有makefile的prefix = /home/centos/CppProject/include/tinyxml2这一行需要改一下(这是头文件所在的位置,库和测试程序的保存位置则跟lib和bin这两个变量有关系),它关系到你在执行命令:make install的时候将头文件,还有生成的静态库都保存到了什么地方。如果要在编译的库中添加调试符号,只要把CXXFLAGS = -fPIC 改成 CXXFLAGS = -g -fPIC。

  改好了之后,只要执行make和make install命令就可以。

四、librdkafka在linux下的编译

  下载源代码:https://github.com/edenhill/librdkafka

  配置:运行configure

./configure --prefix=/home/CppProject/include/librdkafka --exec-prefix=/home/CppProject/library/librdkafka --CPPFLAGS="-g"

  然后接下来的就是make 和make install了。这样编译出来的是带调试符号的。

  configure时,--prefix指定的安装目录,也就是make install时它会把编译好的文件(头文件和库文件生成到你指定了目录下)。C++开发的话,使用的是:librdkafka++.so 。

五、Google protocol buffer 在linux下的编译

   源码下载地址:https://github.com/protocolbuffers/protobuf.git

  进入到protobuf目录下,有个叫configure的文件。

 

几种常用库在CentOS下的编译的更多相关文章

  1. fedora/centos下gcc编译出现gcc: error trying to exec ‘cc1plus’: execvp: No such file or directory

    fedora/centos下gcc编译出现gcc: error trying to exec 'cc1plus': execvp: No such file or directory解决办法 翻译自: ...

  2. boost库在windows下的编译和使用

    因为跨平台的原因,现在要使用到boost库,boost库非常大,现在处于摸索阶段. 首先来说boost库在window下的安装和使用. 一.下载 首先从boost官方主页http://www.boos ...

  3. Linux(centos)下mysql编译安装教程

    Linux下mysql编译安装教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 本文測试环境centOS6.6 一.Linux下编译安装MyS ...

  4. centos 下 gradle 编译打包 apk

    由于Jenkins 装在centos环境下,想实现Android程序的编译,只能通过gradle 命令去打包版本apk,以下记录了如何在centos下使用gradle 打包apk 一.安装 gradl ...

  5. 一种让运行在CentOS下的.NET CORE的Web项目简单方便易部署的自动更新方案

    一.项目运行环境 项目采用的是.NET5开发的Web系统,独立部署在省内异地多台CentOS服务器上,它们运行在甲方专网环境中(不接触互联网),甲方进行业务运作时(一段时间内)会要求异地服务器开机上线 ...

  6. mysql学习笔记(Centos下rpm编译配置+远程访问)

    新工作以来,博主感觉天天都很忙,博客已经好久没有写了 从昨天开始弄centos服务器中搭建mysql5.6,由于yum最新版本只有5.1的所以折腾到现在 首先看看是否已安装过其他版本的mysql [r ...

  7. centos下cmake编译安装mysql5.7.24

    一.centos6.5推荐最小安装.自定义添加如图两个包 二.安装cmake3.0(mysql5.7要求cmake2.9以上.cmake3.1要求gcc g++4.8以上.所以选自3.0) 1.分别执 ...

  8. Nginx 1.5.2 + PHP 5.5.1 + MySQL 5.6.10 在 CentOS 下的编译安装

    最近配置了几台Web服务器,将安装笔记贴出来吧.没时间像以前那样,将文章写的那样系统了,请见谅.详细配置,可以看以前的旧文章: http://blog.zyan.cc/nginx_php_v6 .安装 ...

  9. Mac or Centos 下如何编译objective-C

    #import <Foundation/Foundation.h> int main(int argc,const char *argv[]){ @autoreleasepool{ NSL ...

随机推荐

  1. AutoLayout 根据文字、图片自动计算 UITableViewCell 高度

    原文网址: http://lvwenhan.com/ios/449.html 此系列文章代码仓库在 https://github.com/johnlui/AutoLayout ,有不明白的地方可以参考 ...

  2. 新装centos 6.5 基本配置

    开机自动联网 vi /etc/sysconfig/network-scripts/ifcfg-eth0; 将ONBOOT=no,改为ONBOOT=yes,保存退出 开机直接进入命令行模式 vi /et ...

  3. 从MySQL高可用引出对高可用架构设计的一些思考

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...

  4. luoguP3808[模板]AC自动机(简单版)

    传送门 ac自动机模板题,裸的多串匹配 代码: #include<cstdio> #include<iostream> #include<algorithm> #i ...

  5. 「干货」常用的10个网络DOS命令,菜鸟学了变高手

    1 ping命令 1命令格式 ping 主机名 ping 域名 ping IP地址 如图所示,使用ping命令检查到IP地址210.43.16.17的计算机的连通性,该例为连接正常.共发送了四个测试数 ...

  6. 51 Nod 1640 天气晴朗的魔法( Kruskall )

    #include <bits/stdc++.h> typedef long long LL; using namespace std; ; struct node{ LL u,v,w; n ...

  7. cmd - 命令行窗口中文乱码

    问题 在cmd窗口中输入curl www.baidu.com可以看到有中文乱码的现象,这是因为默认使用的是GBK编码.另外,curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在 ...

  8. nutz 使用beetl

    src目录或src同级的其他目录(比如conf)下创建 beetl.properties文件,文件内容如下 (maven项目)在resources目录下创建 RESOURCE_LOADER=org.b ...

  9. 记录一下在SpringBoot中实现简单的登录认证

    代码参考博客: https://blog.csdn.net/weixin_37891479/article/details/79527641 在做学校的课设的时候,发现了安全的问题,就不怀好意的用户有 ...

  10. jQuery addClass() 源码解读

    addClass: function( value ) { var classes, elem, cur, clazz, j, i = 0, len = this.length, proceed = ...