- 錯誤訊息
在使用某公司提供的ToolChain來Cross-compiler Qemu,而因ToolChain的uClibc版本太低以及缺少過多library,所以最後選擇自行編譯ToolChain來Cross Compiler Qemu。雖然成功Cross-compiler Qemu,但放置板子上執行發生以下錯誤
圖一 - 發生原因
cross-compiler與執行環境的uClibc版本不一樣時,就有可能發生這樣的問題(通常是因為版本低的不支援版本高的)。
不過這個問題也讓我思考另一個問題,到底uClibc與Kernel 之間的關係以及Compiler時是如何呢?? 從Referece[2]上得知 - uClibc的版本,會依賴多少Kernel version以上的版本。
- Kernel的本身並不依賴uClibc的Library,但Compiler時會依賴GCC與uClibc的版本。
- 解決方法
了解問題所在,當然要解決就不難啦。- 先檢查uClibc的版本(常見路徑 : /lib)。
- libuClibc-$UCLIB_VER.so
- ld-uClibc-$UCLIB_VER.so
- libcrypt-$UCLIB_VER.so
- libresolv-$UCLIB_VER.so
- libdl-$UCLIB_VER.so
- libnsl-$UCLIB_VER.so
- libm-$UCLIB_VER.so
- libutil-$UCLIB_VER.so
- libpthread-$UCLIB_VER.so
- libthread_db-$UCLIB_VER.so
- librt-$UCLIB_VER.so
- libstdc++.so.$UCLIB_VER ( for g++)
- 一般情況,新版的uClibc可以相容舊版的uClibc
- 替換合適的uClibc到執行環境底下即可
Reference:
[1] can't handle reloc type 0x26 in my openwrt
[2] Are libc versions tied to kernel versions?
沒有留言:
張貼留言