日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux手機(jī)DIY.庫(kù)文件專題.交叉編譯的浮點(diǎn)問題( 二 )


E600自帶的QTE庫(kù)(FPA soft FP),編譯一個(gè)簡(jiǎn)單的QTE程序,出現(xiàn)如下錯(cuò)誤:
/home/gcc/toolchain/soft-arm-linux/gcc-3.3.2-glibc-2.3.2/bin/../lib/
gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: ERROR: /home/gcc/
toolchain/qt/lib/libqte-mt.so uses FPA instructions, whereas helloqt does not
/home/gcc/toolchain/soft-arm-linux/gcc-3.3.2-glibc-2.3.2/bin/../lib/
gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: failed to merge
target specific data of file /home/gcc/toolchain/qt/lib/libqte-mt.so
collect2: ld returned 1 exit status
這個(gè)編譯環(huán)境是用cross-tool-0.28編譯而成的,而且打了gcc-3.3.2的soft-
float patch,不過按patch說明,是應(yīng)該可以生成FPA soft FP格式的編譯環(huán)境,而
結(jié)果卻是VFP soft FP,這個(gè)適用于E680系列,然不適用夏新E600和飛利浦968 。
后來我在交叉編譯環(huán)境中把GCC_EXTRA_CONFIG的--with-float=soft選項(xiàng)去除
且把soft-float patch也同時(shí)去掉,獲得的是FPA hard FP的編譯環(huán)境 。用這個(gè)環(huán)境
再編譯夏新E600自帶的QTE庫(kù)(FPA soft FP),會(huì)出現(xiàn)類似如下提示:
ld uses hardware FP, whereas libqte-mt.so uses software ...

我試圖在gcc參數(shù)中加上-msoft-float,錯(cuò)誤如下:
arm-linux/bin/ld: cannot find -lfloat collect2: ld returned 1 exit status

這個(gè)需要編譯編譯環(huán)境時(shí)加下nolibfloat的patch 。

如何生成FPA soft FP的格式困擾了好幾天,我查看了soft-float patch出搜
索了大量資料,覺得可能還是patch本身的問題 。我重新下載了gcc.3.4.0,使用
3.4.0 soft patch,另外把bigendian,nolibfloat這一些有沖突的patch去掉,
果然生成了FPA soft FP格式的庫(kù)文件 。
再用E600自帶的QTE庫(kù),編譯只是有一個(gè)告警選項(xiàng):
/home/gcc/toolchain/gcc-3.4.0-glibc-2.2.5/arm-linux/lib/gcc/arm-linux/3.4
.0/../../../../arm-linux/bin/ld: warning: libstdc.so.5, needed by /home/gcc
/toolchain/qt-2.3.8/lib/libqte-mt.so, not found (try using -rpath or -rpath-link)
夏新E600和飛利浦968使用的GCC版本都是3.2.1,3.4.0編譯后是libstdc.so.6,
可以查看下面的lib內(nèi)容,使用的版本是不同的 。
libstdc.so.6

Version definitions:
1 0x01 0x025f4d66 libstdc.so.6
2 0x00 0x08922974 GLIBCXX_3.4
3 0x00 0x056bafd3 CXXABI_1.3

Version References:
required from libgcc_s.so.1:
0x0b792653 0x00 10 GCC_3.3
0x0d696910 0x00 08 GLIBC_2.0
0x0b792650 0x00 07 GCC_3.0
required from libm.so.6:
0x0d696910 0x00 05 GLIBC_2.0
required from libc.so.6:
0x09691f73 0x00 11 GLIBC_2.1.3
0x0d696911 0x00 09 GLIBC_2.1
0x0d696912 0x00 06 GLIBC_2.2
0x0d696910 0x00 04 GLIBC_2.0
libstdc.so.5

Version definitions:
1 0x01 0x025f4d65 libstdc.so.5
2 0x00 0x081a2972 GLIBCPP_3.2
3 0x00 0x0a297d01 GLIBCPP_3.2.1
GLIBCPP_3.2
4 0x00 0x056bafd2 CXXABI_1.2

Version References:
required from libm.so.6:
0x0d696910 0x00 07 GLIBC_2.0
required from libgcc_s.so.1:
0x0b792650 0x00 06 GCC_3.0
required from libc.so.6:
0x0d696912 0x00 10 GLIBC_2.2
0x09691f73 0x00 09 GLIBC_2.1.3
0x0d696911 0x00 08 GLIBC_2.1
0x0d696910 0x00 05 GLIBC_2.0

五、總結(jié)
E600和968編譯環(huán)境問題看似是解決了,其實(shí)不然,這僅僅說明了可以生
成兼容E600,968的庫(kù)文件,能否運(yùn)行則是另外一回事,下文將著重說明運(yùn)行時(shí)
的兼容性問題 。

推薦閱讀