內網編譯安裝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的教程很多,但是測試後很多都失敗了,下面的這份教程是自己找到並測試可以成功的,參考這位博主的教程:
自己就是在 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的過程中體會到,當你經過無數次測試失敗後,才是考驗自己的時候,再堅持一會,或許下次嘗試就可以解決掉這個鞋中小小的磨人沙粒。