2014年6月17日 星期二

[Linux]解決在Ubuntu12.04 64bit上編譯S3C6410的問題

最近極力欲縮減我的電腦容量占用
索性把當初學習開發版S3C6410的系統 Ubuntu10.04刪除
並嘗試在現有Ubuntu12.04上編譯
但還是會遇到一些問題 像是 長高科技官網所說的:
/usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../libexec/gcc/arm-samsung-linux-gnueabi/4.3.1/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory

找到如下:http://www.dmatek.com.tw/tn/viewservers.asp?id=87
當編譯 DMA-6410XP、DMA-6410 及 DMA-6410L 平台的 Linux Kernel 時,為什麼會出現無法開啟 libmpfr.so.1 或 libgmp.so.3 的錯誤呢?
答:錯誤狀況一:
/usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../libexec/gcc/arm-samsung-linux-gnueabi/4.3.1/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2
錯誤狀況二:
/usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../libexec/gcc/arm-samsung-linux-gnueabi/4.3.1/cc1: error while loading shared libraries: libgmp.so.3: cannot open shared object file: No such file or directory
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2
Ans: 編譯 DMA-6410XP 等平台的 Linux Kernel 時使用了平台光碟裡的 4.3.1-eabi-armv6 這個編譯器,當我們在 Ubuntu 9.04 及 Ubuntu 10.04 LTS 這兩個版本的 Ubuntu 上直接使用並沒有任何問題。
但,若您使用更新版本的 Ubuntu,或是使用了 64 位元的 Ubuntu,那麼在使用 4.3.1-eabi-armv6 這個編譯器時,就可能會遇到這個錯誤。
解決的方法是設定 LD_LIBRARY_PATH 變數,設定如下:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/4.3.1-eabi-armv6/mpfr/lib \
:/usr/local/arm/4.3.1-eabi-armv6/gmp/lib \
:/usr/local/arm/4.3.1-eabi-armv6/lib
主要是利用修改 LD_LIBRARY_PATH 變數,加入 libmpfr 及 libgmp 的路徑。
DMA-210U (Cortex A8, S5PV210 系列)

還是出現編譯錯誤
後來使用了討論串中其中一人的方法:
因為您使用 64 位元的 Ubuntu,所以使用 4.3.1-eabi-armv6 這個編譯器才會遇到找不到 libmpfr.so.1 的問題。
解決方法是設定 LD_LIBRARY_PATH 就可以了。
請參閱 http://dmatek.twbbs.org/faq-android 這個頁面裡的「Q & A」第 3 項。 
執行以下指令設定 LD_LIBRARY_PATH 就可以了:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/4.3.1-eabi-armv6/mpfr/lib:/usr/local/arm/4.3.1-eabi-armv6/gmp/lib:/usr/local/arm/4.3.1-eabi-armv6/lib

便順利解決了~~~
所以最終 我在~/.bashrc裡的設定會是:

#S3C6410export PATH=/usr/local/arm/4.3.1-eabi-armv6/usr/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/4.3.1-eabi-armv6/mpfr/lib:/usr/local/arm/4.3.1-eabi-armv6/gmp/lib:/usr/local/arm/4.3.1-eabi-armv6/lib

沒有留言:

張貼留言