Seeker.Log

一个笨拙的探索者的思考

0%

openvpn交叉编译

openvpn交叉编译

需要源码交叉编译openvpn的操作步骤

背景

因为某些原因,只能选择交叉编译,当前平台是64位的,但是目标平台是32位的,目标平台又禁止了apt-get等相关操作,所以必须要源码交叉编译openvpn及其相关依赖库。因为之前交叉编译的时候,大多第三方库都是有现成的CMaKeLists.txt或者是Makefile,所以编译起来倒是也方便,但是,openvpn它只有configure文件,它是需要执行./configure成功设置好各种环境变量配置以后,才能生成Makefile的。于是,一开始踩了很多坑,在此做一个记录……

一、预先配置的环境变量

export CC=指定交叉编译时gcc编译版本
export CXX=指定交叉编译时g++编译版本

二、编译openssl

完整编译选项配置如下:
setarch i386 ./config -m32 –prefix=/home/muhan/openssl/ –openssldir=/home/muhan/openssl/ -Wl,-rpath,/usr/local/openssl/lib shared

详细选项含义如下:
配置-m32 指定编译32位的库
配置–prefix 指定openssl的安装目录
配置–openssldir 指定openssl的目录
配置shared关键字 指定编译时生成动态库(libssl.so/libcrypto.so及其相关软连接)

然后再make && make install 即可

三、编译安装lzo

完整编译选项配置如下:
./configure –enable-shared –prefix=/home/muhan/lzo/usr –with-sysroot=指定交叉编译时的sysroot的路径名

详细选项含义如下:
配置–enable-shared 指定编译时生成动态库(liblzo2.so及其相关软连接)
配置–prefix 指定lzo安装路径
配置–with-sysroot 指定交叉编译时的sysroot

然后再make && make install 即可

四、编译安装openvpn

完整编译选项配置如下:
./configure CC=指定交叉编译时gcc的那个版本 –prefix=/home/muhan/openvpn/ LZO_CFLAGS=”-I/home/muhan/lzo/usr/include” LZO_LIBS=”-L/home/muhan/lzo/usr/lib -llzo2” OPENSSL_CFLAGS=”-I/home/muhan/openssl/include” OPENSSL_LIBS=”-L/home/muhan/openssl/lib -lssl -lcrypto” –disable-plugin-auth-pam

详细选项含义如下:
配置CC的版本
配置–prefix 指定openvpn安装目录
配置LZO_CFLAGS 指定lzo的头文件路径
配置LZO_LIBS 指定lzo的库文件路径及所链接的库
配置OPENSSL_CFLAGS 指定openssl的头文件路径
配置OPENSSL_LIBS 指定openssl的库文件路径及所链接的库
配置–disable-plugin-auth-pam 禁掉pam模块

然后再make && make install 即可

总结

当编译第三方库的时候,如果没有CMakeLists.txt,也没有Makefile,只有config或者configure,那么需要先了解编译选项

执行./config –help 或者 ./configure –help 来查看当前支持的编译选项
然后根据提示配置一下我们需要指定的选项,比如自己指定的openssl的版本的库和头文件路径名,比如CC的版本,比如安装路径等等
(当然,如果不需要额外配置这些东西的话,直接走默认配置的话,那么直接执行./config 或者 ./configure 就行)

然后在生成Makefile之后,再make && make install 即可

江湖卖艺,有钱的捧个钱场,有人的捧个人场:P