天天看點

内網編譯安裝net-snmp,提示relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a share

    公司需要在内網環境下(不能通路外網),通用源檔案編譯安裝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的過程中體會到,當你經過無數次測試失敗後,才是考驗自己的時候,再堅持一會,或許下次嘗試就可以解決掉這個鞋中小小的磨人沙粒。

上一篇: 人間,值得