首页 > 解决方案 > GCC 链接错误,重定位被截断以适应:GPREL16 针对符号错误

问题描述

我目前正在交叉编译 tensorflow r1.9。宿主系统是ubuntu 18.04,目标系统是sw26010(一个基于alpha指令集的中文CPU)。交叉编译器基于 GCC 5.3。

由于某些操作系统限制,我必须将所有库静态链接到 tensorflow。libstdc++.a 和 libpthread.a。被包含在内。

经过一些配置,我可以成功编译所有目标文件。(将“//conditions:default”:[],添加到nsync BUILD文件,并将sw2 CPU宏添加到双重转换BUILD文件)。但是,我无法成功链接所有库文件和目标文件。

这是错误消息。

/home/qh5/swgcc530/gcc-5.3.0/libstdc++-v3/src/c++98/ios_init.cc:140:(.text._ZNSt8ios_base4InitD2Ev+0xf4):重定位被截断以适应:GPREL16反对符号`std: :wcerr' 在 /usr/sw-mpp/swcc/swgcc530-tools/usr/sw_64sw2-unknown-linux-gnu/lib/libstdc++.a(globals_io.o) 的 .bss._ZSt5wcerr 部分中定义

这是用于 tensorflow bazel 的 CROSSTOOL。 hastebin 上的 CROSSTOOL 我尝试使用compiler_flag: "-msmall-data"compiler_flag: "-fpic"来修复错误,但失败了。

标签: tensorflowgccbazel

解决方案


最后,通过联系编译团队解决了这个错误。如果你有同样的问题。请向中国编译器团队寻求帮助并更新您的编译器。


推荐阅读