在飛騰平臺移植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 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章