數位天堂

Nokia:科技始終來自於人性; 拜耳:如果文明不能使我們更相愛,那科技便失去意義!
歡迎您的加入,讓我們一起討論科技與環保的整合應用...

您尚未登入。

#1 2012-08-23 22:05:08

tofuliang
新生
註冊日期: 2010-05-29
文章數: 11
目前積分 :   

交叉編譯鏈設定求助

交叉編譯鏈應該怎樣設定呢?
想自己編譯一個新版的PHP,搞了很多天都失敗了,編譯出來都是依賴庫的問題導致運行不了.
一開始不知道注意編譯路徑問題,導致很多庫文件加載不了.
然後試著把依賴庫都安裝到ubuntu的/opt目錄下,大部分的依賴庫都能正常加載了.但是最後3行的依賴庫都是工具鏈裡面的,改不了啊...想讓它加載別的庫還不行,實在想不到辦法了,只好到這裡求教了.
root@unknown:/# ldd php
        libcrypt.so.0 => /opt/lib/libcrypt.so.0 (0x2aabf000)
        libexpat.so.1 => /opt/lib/libexpat.so.1 (0x2aae3000)
        libbz2.so.1.0 => /opt/lib/libbz2.so.1.0 (0x2ab19000)
        libm.so.0 => /opt/lib/libm.so.0 (0x2ab39000)
        libxml2.so.2 => /opt/lib/libxml2.so.2 (0x2ab55000)
        libdl.so.0 => /opt/lib/libdl.so.0 (0x2aca3000)
        libz.so.1 => /opt/lib/libz.so.1 (0x2acb6000)
        libiconv.so.2 => /opt/lib/libiconv.so.2 (0x2acda000)
        libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x2adbb000)
        libc.so.0 => /opt/lib/libc.so.0 (0x2addc000)
        libc.so.0 => /lib/libc.so.0 (0x2ae8e000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2af02000)
        ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)




離線

 

#2 2012-08-24 12:01:21

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: 交叉編譯鏈設定求助

1. 參考這篇.
2. 若認為是library link的問題, 先使用x86 gcc+glibc跑一次所有相關的原始碼. 測試沒問題後, 再改用Tomato gcc+uClibc交叉編譯作測試.
3. man gcc, ld等, 查相關FLAGs的設定方法. 也可參考OpenWrt, Optware關於該套件的相關設定, 再自行編譯測試.



離線

 

#3 2012-08-24 12:57:06

tofuliang
新生
註冊日期: 2010-05-29
文章數: 11
目前積分 :   

Re: 交叉編譯鏈設定求助

交叉編譯鏈應該是沒問題的,我編譯過openwrt_cpu_bench_v06.c,放到路由器裡面可以正常運行的.
現在遇到的問題是,自己編譯出來的程式硬件加載/opt/lib下的(optware)的ld-uClibc.so.0,可不知什麼原因,加載的都是/lib下的.
而這個和交叉編譯工具的版本不一樣,運行的時候就會提示segmentation fault.


離線

 

#4 2012-08-24 21:12:39

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: 交叉編譯鏈設定求助

由Tomato Cross Toolchain所編譯者, 使用/lib/uClibc; 由Optware Toolchain編譯者, 則使用/opt/lib/uClibc. 二者uClibc版本並不相同.


離線

 

#5 2012-08-24 22:23:17

tofuliang
新生
註冊日期: 2010-05-29
文章數: 11
目前積分 :   

Re: 交叉編譯鏈設定求助

我可以到哪裡獲得optware的toolchain呢?我找到這個地址http://www.nslu2-linux.org/wiki/FAQ/OptwareWl500gBuild,但是下載的連結已經404錯誤了.
留意到Entware這個項目,如果我用這個項目的這個toolchain(https://code.google.com/p/wl500g/wiki/C … omFirmware)編譯程序,還會出現類似問題嗎?



離線

 

#6 2012-08-25 16:41:28

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: 交叉編譯鏈設定求助

1. Optware Toolchain, 參考ardayang兄寫的這篇.
2. Cross Toolchain, 依照您要運行的第三方韌體, 參考官方文件取得.
3. Entware應該是用Lly Cross Toolchain, 編譯OpenWrt套件. 還沒試過.

您的疑問應不是選用哪套Cross Toolchain來解決. 要運行的第三方韌體所提供的Cross Toolchain就是標準. 如果沒提供, 當然就得設法自行營造.
出現錯誤, 未必是Cross Toolchain的問題, 有時連核心版本都有關係.
應用程式多用於x86. 轉換平台, 能編譯運作成功是福氣, 失敗也很正常. 故有諸多patch因此而生.

查了一下,
1. Entware 002-uclibc-ldconfig-opt.patch
2. Tomato交叉編譯器內, tools/brcm/K26/hndtools-mipsel-uclibc-4.2.4/target-utils/ldconfig
請自行測試看看.

最後修改: hippo (2012-08-25 23:30:09)


離線

 

#7 2012-08-26 09:50:11

tofuliang
新生
註冊日期: 2010-05-29
文章數: 11
目前積分 :   

Re: 交叉編譯鏈設定求助

hippo 提到:

1. Optware Toolchain, 參考ardayang兄寫的這篇.
2. Cross Toolchain, 依照您要運行的第三方韌體, 參考官方文件取得.
3. Entware應該是用Lly Cross Toolchain, 編譯OpenWrt套件. 還沒試過.

您的疑問應不是選用哪套Cross Toolchain來解決. 要運行的第三方韌體所提供的Cross Toolchain就是標準. 如果沒提供, 當然就得設法自行營造.
出現錯誤, 未必是Cross Toolchain的問題, 有時連核心版本都有關係.
應用程式多用於x86. 轉換平台, 能編譯運作成功是福氣, 失敗也很正常. 故有諸多patch因此而生.

查了一下,
1. Entware 002-uclibc-ldconfig-opt.patch
2. Tomato交叉編譯器內, tools/brcm/K26/hndtools-mipsel-uclibc-4.2.4/target-utils/ldconfig
請自行測試看看.

意思就是說,先打上這個patch,然後再編譯toolchain應該就可以了?
我原本還以為要用toolchain重新編譯一次uclibc,放到/opt下呢...
等我有空試試,php中用到的yaf.so自己也成功編譯了,現在entware基本上已經滿足我需求啦.2個星期沒睡過好覺了,暫時就不折騰了.


離線

 

友情連結

論壇頁尾

Powered by PunBB
© Copyright 2018 Rickard Andersson
RSS Feed