在飞腾平台移植SNMP服务过程

1. 从官网下载指定版本的SNMP,此处选择5.7.3,地址为:https://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.3/

2. 解压:tar -zxvf net-snmp-5.7.3.tar.gz,解压后生成一个net-snmp-5.7.3目录;

3. 设置系统时间:date -s "2019-01-02 01:01:01",必须设置,否则编译会出问题;

4. 安装perl库

由于SNMP需要依赖于perl库,我查了当前系统的/usr/lib/目录下,是没有libperl.so的库文件的,由于飞腾平台不能直接从源上下载安装,因此,只能选择通过下载源码来进行安装。若不先安装perl库,在make过程中会因为缺库而无法继续。

4.1 下载perl源码:https://www.cpan.org/src/README.html, 此处选择perl-5.28.1.tar.gz版本;

4.2 解压:tar -zxvf perl-5.28.1.tar.gz;

4.3 生成编译规则:./Configure -de -Dprefix=/usr/local -Dusethreads -Duseshrplib -Accflags=“-fPIC”

其中,-Duseshrplib选项是设置编译生成libperl.so库文件,-Accflags选项添加的-fPIC是避免动态库和静态库之间互相调用可能导致相对/绝对路径的问题。

4.4 make

4.5 make test

4.6 make install

安装好以后,原系统中就已经安装了perl库,对应也就解决了snmp编译过程中报却-lperl库的问题。

5.  生成编译规则(问答选项回车默认即可):

问题一:报错“configure: error: cannot guess build type; you must specify one”,刚开始该问题,我通过将--host,--build,--target全指定为aarch64,但是报错“Invalid configuration 'aarch64':machine 'aarch64' not recognized”,这是因为在config.guess中并不包含对aarch64体系结构的支持,我尝试在该文件对应分支中加上aarch64但没成功,后来读 config.guess的头部 注释说明,其中有这样一句:

于是我从https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess网址上获取最新的config.guess,并替换现有目录下的该文件,发现最新版本文件中是包含对aarch64支持的。 

同样,config.sub文件也是如此,其头部注释如下图示:

  同理,从https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub下载最新文件进行替换。

至此,该问题算是解决了,此时通过./configure可以直接猜测到对应机器类型并执行编译规则生成。

6. 开始编译:make

问题一:提示:

/usr/bin/ld: /usr/local/lib/libnetsnmp.a(default_store.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against external symbol '__stack_chk_guard@@GLIBC_2.17' can not be used when making a shared object;recompile with -fPIC

/usr/bin/ld: /usr/local/lib/libnetsnmp.a(default_store.o):无法解决R_AARCH64_ADR_PREL_PG_HI21重定向于符号"__stack_chk_guard@@GLIBC_2.17"有冲突 /usr/bin/ld:最后的链接失败:错误的值

该问题折腾了很久,反正是各种试,最后在snmp官网的bug系统中,在别人提的bug 中看到了别人的配置项,需要在编译SNMP时加上--disable-shared选项才行。

所以,很多问题还是要从官网下手,其对应的bug系统地址为:https://sourceforge.net/p/net-snmp/bugs/2701/

7. 安装编译:make install 

 

 

猜你喜欢

转载自blog.csdn.net/jiangganwu/article/details/87706052