powerpc 交叉编译错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了powerpc 交叉编译错误相关的知识,希望对你有一定的参考价值。

在UBUNTU上安装了ELDK ,编译UBOOT 时出现错误信息,那位大神点拨一二,感激不敬!!!
powerpc-linux-ld.bfd: cannot find -lgcc
examples/standalone/Makefile:67: recipe for target 'examples/standalone/hello_world' failed
make[2]: *** [examples/standalone/hello_world] Error 1
scripts/Makefile.build:420: recipe for target 'examples/standalone' failed
make[1]: *** [examples/standalone] Error 2
Makefile:1093: recipe for target 'examples' failed
make: *** [examples] Error 2

环境变量;
declare -x AR="powerpc-linux-ar"
declare -x ARCH="powerpc"
declare -x AS="powerpc-linux-as "
declare -x CC="powerpc-linux-gcc -m32 -mcpu=8548 -mabi=spe -mspe -mfloat-gprs=double --sysroot=##SDKTARGETSYSROOT##"
declare -x CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types"
declare -x COLORTERM="gnome-terminal"
declare -x CONFIGURE_FLAGS="--target=powerpc-linux --host=powerpc-linux --build=i686-linux --with-libtool-sysroot=##SDKTARGETSYSROOT##"
declare -x CONFIG_SITE="/opt/eldk/powerpc-e500v2/site-config-ppce500v2-linux"
declare -x CPP="powerpc-linux-gcc -E -m32 -mcpu=8548 -mabi=spe -mspe -mfloat-gprs=double --sysroot=##SDKTARGETSYSROOT##"
declare -x CPPFLAGS=""
declare -x CROSS_COMPILE="powerpc-linux-"
declare -x CXX="powerpc-linux-g++ -m32 -mcpu=8548 -mabi=spe -mspe -mfloat-gprs=double --sysroot=##SDKTARGETSYSROOT##"
declare -x CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types"
declare -x DISPLAY=":0"
declare -x GDB="powerpc-linux-gdb"

declare -x LD="powerpc-linux-ld --sysroot=##SDKTARGETSYSROOT##"
declare -x LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed"

declare -x MAIL="/var/mail/root"
declare -x NM="powerpc-linux-nm"
declare -x OBJCOPY="powerpc-linux-objcopy"
declare -x OBJDUMP="powerpc-linux-objdump"
declare -x OECORE_ACLOCAL_OPTS="-I /opt/eldk/powerpc-e500v2/sysroots/i686-eldk-linux/usr/share/aclocal"
declare -x OECORE_DISTRO_VERSION="5.6"
declare -x OECORE_NATIVE_SYSROOT="/opt/eldk/powerpc-e500v2/sysroots/i686-eldk-linux"
declare -x OECORE_SDK_VERSION="5.6"

declare -x PATH="/opt/eldk/powerpc-e500v2/sysroots/i686-eldk-linux/usr/bin:/opt/eldk/powerpc-e500v2/sysroots/i686-eldk-linux/usr/bin/powerpc-linux:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

declare -x PKG_CONFIG_SYSROOT_DIR="##SDKTARGETSYSROOT##"
declare -x PWD="/opt/eldk/powerpc-e500v2"
declare -x PYTHONHOME="/opt/eldk/powerpc-e500v2/sysroots/i686-eldk-linux/usr"
declare -x RANLIB="powerpc-linux-ranlib"

declare -x STRIP="powerpc-linux-strip"
declare -x TARGET_PREFIX="powerpc-linux-"

参考技术A

libgcc.a 没有找到:

    检查你的libgcc.a环境变量的设置

    $CC --print-libgcc-file-name

    若路径为libgcc.a 证明是当前目录下的库文件或者是PATH环境变量下的libgcc.a。

    找到你的工具链库的地址

    find -name "libgcc.a" 

    /opt/fsl-qoriq/1.9/sysroots/ppce5500-fsl-linux/usr/lib/powerpc-fsl-linux/4.9.2/libgcc.a3

    将此地址加到PATH里去:

    export PATH=/opt/fsl-qoriq/1.9/sysroots/ppce5500-fsl-linux/usr/lib/powerpc-fsl-linux/4.9.2/libgcc.a:$PATH

参考技术B 这个内核用什么编译,是由KERNELDIR ?

Tensorflow交叉编译错误集锦

前言:

       Tensorflow交叉编译的过程是一个心塞的过程,其中可能会出现各种各样你想不到的错误。。。,个中滋味,只有经历过的人才能体会。

       特意记录下所有碰到的问题,一来作为这段时间的一个小结,二来可以给他人提供些帮助。

正文:

       现将已知问题列表如下,如碰到相同现象,可依此方法解决:

              问题1:

                     错误现象:

                            编译过程中,提示exp("/home/jim/tf2arm/sysroots/x86_64-linux/arm-poky-linux-gnueabi-gcc") :no such file or directory

                     原因分析:

                            我在该目录下可以该目录,但是打开shell运行时,提示却一样:no such file or directory。(这个交叉编译SDK是从别人电脑(UBUNTU系统版本14.04)上拷                                    贝过来了,在他的电脑上可以正常执行),原因可能是由于系统与平台的差异性,导致在一台电脑上可以正常执行,在另一台电脑上却无法执行。

                           百度查了各种方法:

                                  1) chmod 777 -R sysroots  添加可执行权限,不行

                                  2) sudo apt-get install lsb-core  添加对32位系统的兼容支持,不行

                                  3) sudo apt-get install ia32-libs   添加对32位系统的兼容支持,不行

                    解决方法:

                           用别人生成的SDK不行,那个自己编译一个,方法可参考如下链接:手动编译用于i.MX6系列的交叉编译SDK

             问题2:

                    错误现象:

                           拷贝新生成的两个可执行包到相应目录:

                                        opt/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poly-linux-gnueabi

                                        opt/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc

                                再次编译bash build_arm_poky.sh

                                报错:error:target CPU does not support ARM mode

                    原因分析:

                                查看目标芯片参数:Cortex-M4对应ARMv7E-M,也就是-march=armv7-a  ,-mtune=cortex-a9

                                如果使用--mcpu=cortex-m3选项时,需要与-mthumb选项搭配。未解决!

                                通过报错时的提示信息,发现:环境变量里有两条记录:-march=armv7-a和-march=armv7

                    解决方法:

                                执行脚本 :./configure 

                                              其它的选项都选No,-march选项使用armv7-a即可。

             问题3:     

                    问题现象:

                                 cortexa9hf-neon-poky-linux-gnueabi/usr/include/gnu/stubs.h:7:29:fatal error: gnu/stubs-soft.h :No such file or directory

                                 compilation terminated

                    原因分析:

                                 在编译生成的包中未查找到该文件,但找到一个类似文件:stubs_hard.h,查看该文件内容,只是些宏定义。

                    解决方法:

                                 直接复制文件stubs-hard.h,更名为为stubs-soft.h

                  问题4:

                         现象:

                               extern/asm/nasm/error.c,找不到error.h

                         原因分析:

                               源代码查找error.h, 位于extern/asm/include,应该是编译路径包含不对导致。

                         解决方法:

                               比较土:找到当前路径,直接复制到当前文件:cp include/error.h .

                    问题5:

                            ld:找不到文件:ctri.o

                           原因分析:

                                 当前源代码包中有该文件

                           解决方法:

                                  sudo chmod 777 -R sysroots 

                     问题6:

                           BUILD:bazel:8:1:undeclared inclusion(s) in rule ‘‘

                     解决方法:

                           bazel clean --expunge    

 

                     问题6:

                           BUILD:tensorflow/WORKSPACE:3:1:name ‘http_archive‘ is not defined

                     原因分析:

                            怀疑是包不兼容导致,当前bazel 0.25.2,tensorflow 1.10

                     解决方法:

                            当前tensorflow  1.10最高只能支持Bazel0.19.2,所以,降Bazel版本到0.18.1   

1.

tensorflow/python/lib/core/py_func.cc:355:39 :error: invalid conversion from ‘const char*‘ to ‘char*‘ [-fpermissive]

找到错误处,在接口返回值处添加(char *)

external/gif_archive/lib/egif_lib.c:62:6:error:‘S_IREAD‘ undeclared(first use in this function)

修改S_IREAD为S_IRUSR

external/gif_archive/lib/egif_lib.c:62:16:error:‘S_IWRITE‘ undeclared(first use in this function)

修改S_IWRITE为S_IWUSR

或:在gif_lib.h中定义

#define S_IREAD S_IRUSR

#define S_IWRITE S_IWUSR

错误原因可能是没有编译Android,因为在external/gif_archive下BUILD.bazel里有定义

 

2  external/png_archive/pngpriv.h:911:4 :error:#error ZLIB_VERNUM!= PNG_ZLIB_VERNUM " -I (include path) error:see the notes in pngpriv.h

#error ZLIB_VERNUM != PNG_ZLIB_VERNUM 

Zlib库与libpng版本号不一致   

 查看Zlib版本:   

      find /usr/ -name zlib.pc   搜索结果:/usr/lib/x86_64-linux-gnu/pkgconfig/zlib.pc

      cat /usr/lib/x86_64-linux-gnu/pkgconfig/zlib.pc  版本信息会显示出来 当前版本是Version:1.2.8 

查看libpng版本:

     find /usr/ -name libpng  (当前版本1.2) 

与Zlib:1.2.8之对应的libpng版本应该是1.5,     

   安装libpng:

      下载地址:  https://sourceforge.net/projects/libpng/files/

       tar -xzvf  libpng-1.5.30.tar.gz  

       cd libpng-1.5.30.tar.gz  

       ./configure

       make check

       sudo make install

       sudo ldconfig

 

以上是关于powerpc 交叉编译错误的主要内容,如果未能解决你的问题,请参考以下文章

Google 协议缓冲区交叉编译

MIPS交叉编译错误:非法指令

为 ARM 交叉编译时共享对象导入错误

GDK 交叉编译错误

交叉编译C++树莓派标准错误

C++ Linux 到 Windows 交叉编译错误