首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交叉编译中的libtool :仅在arm目标上重新链接问题;i 386/x86_64/aarch64目标正常

交叉编译中的libtool :仅在arm目标上重新链接问题;i 386/x86_64/aarch64目标正常
EN

Stack Overflow用户
提问于 2018-07-24 20:01:42
回答 1查看 1.1K关注 0票数 0

我在我的项目(MiniMyth2)中添加了其他目标: arm和aarch64 (MiniMyth2使用交叉编译为给定平台构建mythtv设备)。

我有很好的交叉编译(和工作设备)用于: i386、x86_64和aarch64。

所有目标都是使用完全相同的包、构建系统、makefiles等构建的。要选择目标,我只需要更改:交叉编译目标字符串和gcc/ld标志。

对于i386、x86_64和aarch64来说,这是可行的,但对于ARM目标则不行。

然而,在ARM,我有许多软件包失败与libtool重新链接。通常失败是这样的:

代码语言:javascript
复制
make[11]: Entering directory `/home/piotro/minimyth-dev/script/gtk/glib/work/main.d/glib-2.53.1/gmodule'
 //home/piotro/minimyth-dev/images/build/usr/bin/mkdir -p '/home/piotro/minimyth-dev/images/main/usr/lib'
 //home/piotro/minimyth-dev/images/build/bin/bash ../libtool   --mode=install //home/piotro/minimyth-dev/images/build/usr/bin/install -c   libgmodule-2.0.la '/home/piotro/minimyth-dev/images/main/usr/lib'
libtool: warning: relinking 'libgmodule-2.0.la'
libtool: install: (cd /home/piotro/minimyth-dev/script/gtk/glib/work/main.d/glib-2.53.1/gmodule; //home/piotro/minimyth-dev/images/build/bin/bash "/home/piotro/minimyth-dev/script/gtk/glib/work/main.d/glib-2.53.1/libtool"  --tag CC --mode=relink armv7a-minimyth-linux-gnueabihf-gcc -Wall -Wstrict-prototypes -Werror=declaration-after-statement -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format=2 -Werror=missing-include-dirs -fvisibility=hidden -pipe -pipe -march=armv7-a -O2 -flto -Wl,-Bsymbolic-functions -Wl,-z,nodelete -Wl,--export-dynamic -version-info 5301:0:5301 -export-dynamic -Wl,--as-needed -pipe -pipe -march=armv7-a -O2 -flto -o libgmodule-2.0.la -rpath /usr/lib libgmodule_2_0_la-gmodule.lo -ldl ../glib/libglib-2.0.la -inst-prefix-dir /home/piotro/minimyth-dev/images/main)
libtool: relink: armv7a-minimyth-linux-gnueabihf-gcc -shared  -fPIC -DPIC  .libs/libgmodule_2_0_la-gmodule.o   -ldl -L/home/piotro/minimyth-dev/images/main/usr/lib -L/usr/lib -lglib-2.0 -lpcre -lpthread  -march=armv7-a -O2 -flto -Wl,-Bsymbolic-functions -Wl,-z -Wl,nodelete -Wl,--export-dynamic -Wl,--as-needed -march=armv7-a -O2 -flto   -Wl,-soname -Wl,libgmodule-2.0.so.0 -o .libs/libgmodule-2.0.so.0.5301.0
/usr/lib/libgcc_s.so: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
libtool:   error: error: relink 'libgmodule-2.0.la' with the above command before installing it
make[11]: *** [install-libLTLIBRARIES] Error 1

当然,/usr/lib/libgcc_s将不会被识别为x86_64体系结构(我正在交叉编译的操作系统是x86_64),而目标是ARM。

但是:为什么libtool在寻找/usr/lib/libgcc_s?

在我的交叉构建过程中,目标之间唯一的区别是:目标字符串和gcc/ld标志:

代码语言:javascript
复制
NAME:        cross-compilation target (in glibc, etc):
c3           -> i586-minimyth-linux-gnu
c3-2         -> i586-minimyth-linux-gnu
pentium-mmx  -> i586-minimyth-linux-gnu
atom         -> x86_64-minimyth-linux-gnu
x86-64       -> x86_64-minimyth-linux-gnu
armv7        -> armv7a-minimyth-linux-gnueabihf
armv8        -> aarch64-minimyth-linux-gnu

gcc/ lfags:

代码语言:javascript
复制
c3           -> -march=atom -mtune=atom -O2 -mfpmath=sse -ftree-vectorize -mmovbe
c3-2         -> -march=c3-2 -mtune=c3-2 -Os -mfpmath=sse
pentium-mmx  -> -march=pentium-mmx -mtune=generic  -Os
atom         -> -march=atom -mtune=atom -O2 -mfpmath=sse -ftree-vectorize -mmovbe
x86-64       -> -march=x86-64 -mtune=generic  -O3 -mfpmath=sse
armv7        -> -march=armv7-a -O2
armv8        -> -march=armv8-a -O2

gcc人人共享:-pipe -flto

所有人通用ld:-Wl,--as-needed -pipe -flto

Rest (包、制造文件等完全相同)

gcc是7.3.0,glibc是2.27,binutils是2.28.1

EN

回答 1

Stack Overflow用户

发布于 2018-08-23 12:14:45

这个问题中的问题似乎是众所周知的交叉编译环境中的libtool问题。

Yocto项目的人员似乎解决了许多libtool交叉编译问题。

Yocto项目的以下补丁允许我将整个项目交叉编译到所有4个目标(arm、aarch64、i386和x86_64):

libtool-2.4.6-fixinstall.patch

libtool-2.4.6-trailingslash.patch

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51506669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档