Linux开发环境第三方库规划

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: Linux开发环境第三方库规划.pdf 【本文目的】 让工作变得有条理,不乱糟糟,即使存在大量的第三方,也有章可循。简而言之,就是要保持目录的干净(如/usr/local目录),保持文件的干净(如profile文件) 【安装目录建议】 1...
img_e25d4fb2f8de1caf41a735ec53088516.pngLinux开发环境第三方库规划.pdf

【本文目的】

让工作变得有条理,不乱糟糟,即使存在大量的第三方,也有章可循。简而言之,就是要保持目录的干净(如/usr/local目录),保持文件的干净(如profile文件)

【安装目录建议】

1)       如果是多人共享的,可考虑在/usr/local目录下建立子目录thirdparty,不太建议直接放在/usr/local目录下,那会显得有些凌乱,也不便于整体打包复制到其它机器;

2)       如果/usr/local所在分区不够大,则可考虑软链接方式,或者直接在其它目录下建立子目录thirdparty

3)       如果只是自己独自使用的,则可以考虑在$HOME下建立子目录thirdparty;

4)       同样如果$HOME所在分区不够,可以考虑软连接方式或在其它目录下建立thirdparty

【问题思考】

第三方按使用性质可分为三类:

1)       仅代码中会使用到的第三方库,如libevent

2)       工具型,代码中不会使用到的,如automake

3)       综合型,即是工具,同时代码中也会使用到的,如MySQL

 

是否需要对它们分开对待,还是同等对待?

/etc/profile文件】

# thirdparty-HOME

export THIRDPARTY_HOME=/usr/local/thirdparty

# thirdparty-PATH

export PATH=$THIRDPARTY_HOME/m4/bin:$PATH

export PATH=$THIRDPARTY_HOME/automake/bin:$PATH

export PATH=$THIRDPARTY_HOME/autoconf/bin:$PATH

export PATH=$THIRDPARTY_HOME/cmake/bin:$PATH

export PATH=$THIRDPARTY_HOME/bison/bin:$PATH

export PATH=$THIRDPARTY_HOME/valgrind/bin:$PATH

export PATH=$THIRDPARTY_HOME/subversion/bin:$PATH

export PATH=$THIRDPARTY_HOME/openssl/bin:$PATH

export PATH=$THIRDPARTY_HOME/thrift/bin:$PATH

export PATH=$THIRDPARTY_HOME/sqlite/bin:$PATH

# thirdparty-MANPATH

export MANPATH=$THIRDPARTY_HOME/m4/share/man:$MANPATH

export MANPATH=$THIRDPARTY_HOME/autoconf/share/man:$MANPATH

export MANPATH=$THIRDPARTY_HOME/automake/share/man:$MANPATH

export MANPATH=$THIRDPARTY_HOME/cmake/share/man:$MANPATH

export MANPATH=$THIRDPARTY_HOME/bison/share/man:$MANPATH

export MANPATH=$THIRDPARTY_HOME/valgrind/share/man:$MANPATH

export MANPATH=$THIRDPARTY_HOME/subversion/share/man:$MANPATH

export MANPATH=$THIRDPARTY_HOME/openssl/ssl/man:$MANPATH

export MANPATH=$THIRDPARTY_HOME/sqlite/share/man:$MANPATH

# thirdparty-LD_LIBRARY_PATH

export LD_LIBRARY_PATH=$THIRDPARTY_HOME/subversion/lib:$LD_LIBRARY_PATH

【安装目录结构】

/usr/local/thirdparty# ls -l

total 60

lrwxrwxrwx 1 root root   13 2015-08-08 13:20 autoconf -> autoconf-2.69

drwxr-xr-x 4 root root 4096 2015-08-08 13:20 autoconf-2.69

lrwxrwxrwx 1 root root   13 2015-08-08 13:22 automake -> automake-1.15

drwxr-xr-x 4 root root 4096 2015-08-08 13:22 automake-1.15

lrwxrwxrwx 1 root root    9 2015-08-08 14:47 bison -> bison-3.0

drwxr-xr-x 5 root root 4096 2015-08-08 13:32 bison-3.0

lrwxrwxrwx 1 root root   12 2015-08-08 11:49 boost -> boost_1_57_0

drwxr-xr-x 4 root root 4096 2015-08-08 11:54 boost_1_57_0

lrwxrwxrwx 1 root root   11 2015-08-08 14:24 cmake -> cmake-3.2.2

drwxr-xr-x 5 root root 4096 2015-08-08 14:24 cmake-3.2.2

lrwxrwxrwx 1 root root   10 2015-08-08 12:07 glog -> glog-0.3.4

drwxr-xr-x 5 root root 4096 2015-08-08 12:07 glog-0.3.4

lrwxrwxrwx 1 root root   22 2015-08-08 11:34 libevent -> libevent-2.0.22-stable

drwxr-xr-x 5 root root 4096 2015-08-08 11:34 libevent-2.0.22-stable

lrwxrwxrwx 1 root root    9 2015-08-08 13:29 m4 -> m4-1.4.17

drwxr-xr-x 4 root root 4096 2015-08-08 13:29 m4-1.4.17

lrwxrwxrwx 1 root root   32 2014-08-08 12:04 mysql -> mysql-5.6.24-linux-glibc2.5-i686

drwxr-xr-x 4 root root 4096 2014-08-08 12:04 mysql-5.6.24-linux-glibc2.5-i686

lrwxrwxrwx 1 root root   14 2014-08-08 11:30 openssl -> openssl-1.0.2a

drwxr-xr-x 6 root root 4096 2014-08-08 11:23 openssl-1.0.2a

lrwxrwxrwx 1 root root   14 2014-08-08 12:18 protobuf -> protobuf-2.6.1

drwxr-xr-x 5 root root 4096 2014-08-08 12:18 protobuf-2.6.1

lrwxrwxrwx 1 root root   23 2014-08-08 12:11 sqlite -> sqlite-autoconf-3080803

drwxr-xr-x 6 root root 4096 2014-08-08 12:11 sqlite-autoconf-3080803

lrwxrwxrwx 1 root root   17 2014-08-08 14:47 subversion -> subversion-1.6.20

drwxr-xr-x 6 root root 4096 2014-03-27 14:16 subversion-1.6.20

lrwxrwxrwx 1 root root   12 2014-08-08 13:08 thrift -> thrift-0.9.2

drwxr-xr-x 5 root root 4096 2014-08-08 13:08 thrift-0.9.2

lrwxrwxrwx 1 root root   15 2014-08-08 11:09 valgrind -> valgrind-3.10.1

drwxr-xr-x 6 root root 4096 2014-08-08 11:08 valgrind-3.10.1

【第三方安装操作建议】

1)       如果多人共享,建议以root帐号安装;如果仅自己使用,则建议自己的帐号安装;

2)       安装目录建议带上版本号,如/usr/local/thirdparty/protobuf-2.6.1,在安装成功后再以不带版本号的名称做个软链接,如:cd /usr/local/thirdparty&&ln -s protobuf-2.6.1 protobuf

3)       如果是以root帐号安装的,则建议将环境变量添加到/etc/profile文件中;否则建议添加到用户自己的~/.profile~/.bashrc文件中;

4)       强烈建议环境变量的添加按/etc/profile文件】所示格式进行,这样多而不乱。

【第三方库目录结构】

对于开源的CC++第三库而言,多数使用automake编译,当前有些逐步改用cmake编译,如gflags改用了cmakethrift也开始引入了cmake

不管是以automake,还是以cmake,当make install安装后,它们的目录结构多数如下所示的形式:

/usr/local/thirdparty/glog

|-- include

|   `-- glog

|-- lib

`-- share

 

从上不难看出,对于include目录是一个ABA的结构,对于lib则是直接的AB结构。这样,在Makefile文件中指定CPPFLAGSLDFLAGS时,一般可标准化写法:

-I$THIRDPARTY/glog/include -L$THIRDPARTY/glog/lib -lglog

 

如果不符合这样的一个结构,建议修改成这样,一个重要原因是:非常强烈建议在代码中#include时包含第三方库名,如:#include ,这种做法可以减少文件名冲突,使用MySQL时就可能遇到这个问题。

 

但对于像protobuf这样的ABCA结构,则不用修改,但#include时需要将BC带入,如:#include google/protobuf/message.h>

 

MySQLSQLite3都不是标准的ABAABCA结构,因此需要调整一下。

Boost的编译和安装】

Boost既不是标准的automake编译安装,也不是cmake编译安装,它用的是自己独有的安装,多数情况下可使用如下两条命令编译和安装它:

1)       ./bootstrap.sh --without-icu --without-libraries=python,graph,graph_parallel,mpi,wave

2)       ./b2 install threading=multi --prefix=$THIRDPARTY_HOME/boost --without-python --without-graph --without-graph_parallel --without-mpi --without-wave

 

其中bootstrap.sh的目的是生成b2。,然后使用b2来编译安装Boost

OpenSSL的编译和安装】

OpenSSL也不是标准的automakecmake安装,它用的也是自己独有的安装,多数情况下建议如下步骤编译安装它:

1)       ./config --prefix=$THIRDPARTY_HOME/openssl shared threads

2) make depend # openssl-1.0.2h之前版不需要这一步
3)      
make

4)       make install

 

第一步config的作用类似于automakeconfigure,用于生成Makefile文件,之后就和automake一样操作。

Thrift的编译和安装】

0.9.2版本之前的Thrift,只支持标准的automake编译,但从0.9.2开始引入了cmake编译,两种方式共存。

如果OpenSSL不是被安装在默认的目录下(即没有指定--prefix时安装OpenSSL),则在编译Thrift时可能会遇到找不到OpenSSL,这个时候可按如下方式编译安装Thrift

./configure --prefix=$THIRDPARTY_HOME/thrift-0.9.2 \

            --with-boost=$THIRDPARTY_HOME/boost \

            --with-libevent=$THIRDPARTY_HOME/libevent \

            CPPFLAGS="-I$THIRDPARTY_HOME/openssl/include" \

            LDFLAGS="-ldl -L$THIRDPARTY_HOME/openssl/lib" \

            --with-qt4=no --with-c_glib=no --with-csharp=no \

            --with-erlang=no --with-perl=no --with-ruby=no --with-haskell=no \

            --with-go=no --with-d=no

 

不难看出,这里指定了CPPFLAGSLDFLAGS

MySQL的编译和安装】

一般情况下,不建议以源码方式安装MySQL

如果以通用的二进制tar包安装MySQL(如mysql-5.6.24-linux-glibc2.5-x86_64.tar.gz),则在解压它之后可找到名为INSTALL-BINARY的文件,这个文件即列出了安装步骤,虽然是E文的,但比较容易看懂。

解压tar安装包后,会看到includelib两个目录,它不符合前面所说的ABAABCA结构,建议按ABA的结构调整一下,以方便使用。

【后序】

从近来的一些趋势看,一些开源库正在逐步使用cmake替代automake,也许几年后成了清一色的cmake,而automake慢慢地被淘汰。

除了cmake外,其实还有其它选择,比如Google20153月开源的构建工具Bazelhttps://github.com/google/bazel)也是个不错的选择。微软公司在Bazel之前开源了自家构建工具MSBuildhttps://github.com/Microsoft/msbuild)。国内的腾讯公司更是在2011年就开源了大型构建工具Bladehttps://github.com/chen3feng/typhoon-blade)。

对于Linux平台上的C/C++开发者,建议去了解下BladeBazel,这工具上手不难,功能强大,易于使用,一旦用上就容易爱上。

 
安装openssl
# ./config --prefix=/usr/local/thirdparty/
openssl-1.0.2a shared threads


【安装httpd(apache),支持https】
# ./configure --with-apr=/usr/local/thirdparty/ apr-1.4.6 --with-apr-util=/usr/local/thirdparty/ apr-util-1.5.1 --with-ssl=/usr/local/thirdparty/ openssl-1.0.2a --with-pcre=/usr/local/thirdparty/ pcre-8.32 --prefix=/usr/local/ httpd-2.4.3 
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
XML Java Linux
【Linux 第三方库】linux 交叉编译dbus,expat
【Linux 第三方库】linux 交叉编译dbus,expat
34 0
|
4月前
|
Ubuntu Linux Shell
003.linux开发环境配置及linux极速入门
相信大家来学服务器开发应该都是安装好了linux系统的吧,博主使用的是ubuntu 16.04版本。centos也是可以的,不做强制要求。 如果大家装好了原始的linux版本并且能够连网的话(不能联网或者未安装linux系统,实在需要可给博主留言,博主可以单独出一个教程)
47 2
|
5月前
|
Java 关系型数据库 MySQL
Linux 系统一键搭建开发环境
Linux 系统一键搭建开发环境
39 0
|
4月前
|
Linux Python
Linux Debian12使用VSCode和Python搭建flask开发环境
本文主要介绍了Linux Debian12使用VSCode和Python搭建flask开发环境的方法,并结合一个基础flask网页例子,测试是否运行正常。
56 2
Linux Debian12使用VSCode和Python搭建flask开发环境
|
2月前
|
存储 Linux 编译器
Linux 交叉编译第三方库需要设置的环境变量
Linux 交叉编译第三方库需要设置的环境变量
37 0
|
2天前
|
JavaScript Java 应用服务中间件
linux开发环境搭建
搭建Java开发环境(1.8.0_131)、MySQL(8.0)安装与远程访问配置、Nginx反向代理设置和Node.js(v12.13.1)在Linux上的详细教程。包含环境变量配置、密码安全、 Navicat连接测试、Nginx配置文件修改及域名解析。如需相关项目开发支持,
|
2天前
|
Linux C语言
suse linux 11 安装GCC开发环境
suse linux 11 安装GCC开发环境
|
12天前
|
Linux 编译器 C语言
Linux课程四课---Linux开发环境的使用(gcc/g++编译器的相关)
Linux课程四课---Linux开发环境的使用(gcc/g++编译器的相关)
|
12天前
|
Linux
Linux课程四课---Linux开发环境的使用(自动化构建工具-make/Makefile的相关)
Linux课程四课---Linux开发环境的使用(自动化构建工具-make/Makefile的相关)
|
12天前
|
Linux 开发工具 C语言
Linux课程四课---Linux开发环境的使用(vim编辑器的相关)
Linux课程四课---Linux开发环境的使用(vim编辑器的相关)