作者robinliao (qqq)
看板LinuxDev
标题Re: [问题] 移植到新板子
时间Sat Jun 21 22:49:31 2014
您好:
抛砖引玉一下,有错误请前辈指正。
: 首先我先使用 configure 先产生出 Makefile
configure通常有一个--host参数让您指定cross compile的设定,
不过这个选项我不确定是不是每个autotools产生的套件都会有。
可以先configure --help看一下。
: 然後再去修改 Makefie 的 CC, AR, RANLIB, STRIP
这样的方式在cross compile时很有可能会有很严重的後果。
就是
: bin/ld: skipping incompatible /usr/local/lib/libz.a when searching for -lz
: /opt/mips-linux-uclibc/usr/bin/../lib/gcc/mips-linux-uclib......
: bin/ld: skipping incompatible /usr/local/lib/libz.so when searching for -lz
: /opt/mips-linux-uclibc/usr/bin/../lib/gcc/mips-linux-uclib......
: bin/ld: cannot find -lz
cross-compile是要产生成非目前机器上面的binary。比如说在Intel CPU主机上面要
产生MIPS的binary。编译并不是只有把你自己的程式码转成binary就收工了,还要有
其他的函式库配合。要叫产生MIPS binary的compiler去link Intel binary是不正确
的。
cross-compile关心的是target的函式库是否存在,也就是说在cross-compile中的libz.so
讲的是MIPS binary的libz.so而不是本机上面的libz.so。
这也是为何configure时候要下--host参数,这样autotools才会去找toolchain提供的
函式库而不是本机上面的函式库。如果不幸没有--host,我会使用configure然後加入
CC, CFLAGS, LDFLAGS等变数让autotools找到target的函式库。
另外一点要注意的是有时候缺少的函式库toolchain不一定会提供,这时候就要自己
porting这些函式库,然後还要指定link路径等。运气不好可能会是树状porting。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.161.96.2
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1403362174.A.30E.html
1F:→ lantw44:在 configure.ac 中如果有 AC_CANONICAL_HOST 和 06/21 23:26
2F:→ lantw44:AC_CANONICAL_BUILD 就会有 --host 和 --build 06/21 23:26
3F:推 lovefo:感谢大大的详细讲解..我太弱了 我加上 -host就过了 感谢 06/22 22:37
4F:推 dardar923:推~ 06/27 11:16