公司需要在内网环境下(不能访问外网),通用源文件编译安装net-snmp,监控内网服务器的参数信息,但是在编译,即make的情况下,出现了Error,因为对linux的深度使用不是很熟悉,所以经过几天的测试才找到解决办法,下面是错误:
/usr/bin/ld: /usr/local/perl/lib/5.16.3/x86_64-linux-thread-multi/CORE/libperl.a(op.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
/usr/local/perl/lib/5.16.3/x86_64-linux-thread-multi/CORE/libperl.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make[1]: *** [libnetsnmpagent.la] 错误 1
make[1]: 离开目录“/home/yinhai/net-snmp-5.5.2/agent”
通过源文件编译安装net-snmp的教程很多,但是测试后很多都失败了,下面的这份教程是自己找到并测试可以成功的,参考这位博主的教程:
https://www.cnblogs.com/yjken/p/3921989.html
自己就是在 make的时候出现了本文中的错误,查找了很多解决办法,最后测试成功的解决如下:
即删除掉错误信息中提示的动态链接库,libperl.a
rm -f /usr/local/perl/lib/5.16.3/x86_64-linux-thread-multi/CORE/libperl.a
删除掉后可以通过 make clean 清除掉 make产生的文件,再次make就可以不报错了,然后继续进行make install;或者删除上面的文件后,直接删除解压后的文件夹,重新解压再次make make install。
通过解决这个bug的过程中体会到,当你经过无数次测试失败后,才是考验自己的时候,再坚持一会,或许下次尝试就可以解决掉这个鞋中小小的磨人沙粒。