刚入手了一块荔枝派Nano的板子,按照官方的教程好不容易把系统跑起来了,写一个最简单的程序"Hello word!",放到板子上一运行就"segmentation fault",完全不知道什么情况,即使烧官方搭建好的系统也一样,百度了好久都找不到答案,后来通过file命令查看该可执行文件得到:
print_test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=db8e6e41226ba13dc89fc5ebeaf8e8fa0a8ac0cd, with debug_info, not stripped
然后我就尝试file根文件系统下的busybox,得到:
busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, stripped
于是猜测是编译器版本的问题,编译应用程序的时候使用的编译工具应该是要和根文件系统的交叉编译工具一致才行,可我完全是按照官方教程做的呀,如果存在这么大的问题,为什么官方完全没有提及呢?
离线
链接的时候加 -static 命令, 静态链接解君愁.
离线
链接的时候加 -static 命令, 静态链接解君愁.
静态编译也不行,运行后没有输出segmentation fault,变成Illegal instruction了
最近编辑记录 zhouyu2019 (2019-11-21 13:36:32)
离线
你用的是哪个gcc工具链?
离线
你用的是哪个gcc工具链?
我自己编译的系统:内核和应用程序都是用gcc-linaro-7.2.1编译,根文件系统没去配置工具链,直接用的官方的.config文件,工具链是它自己安装的,编译完能看到使用的工具链版本是7.3的。
官方的系统:内核用gcc-linaro-7.2.1编译,根文件系统和应用程序用什么版本的我不知道,反正我用gcc-linaro-7.2.1编译的应用程序在官方系统上也是一样不能用。
离线
gcc-linaro-7.2.1 下载的完整链接发一下,我看看问题在哪里
谢谢晕哥!这是工具链下载的完整链接: http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
离线
root@whycan.cn:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin# ./arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin/../libexec/gcc/arm-linux-gnueabi/7.2.1/lto-wrapper
Target: arm-linux-gnueabi
Configured with: '/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/snapshots/gcc.git~linaro-7.2-2017.11/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=soft --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/_build/sysroots/arm-linux-gnueabi --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabi/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabi --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: posix
gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)
工具链有问题,编译u-boot和内核或许可以。
以前有网友遇到过了。
看到粗体字了吗?这个gcc不适合arm9的 f1c100s.
离线
离线
这样啊,那就有点坑了,官方教程在编译uboot的时候让下载这个工具链,后面的内容也没说要用其它工具链来编译。
晕哥,那我到底应该用哪个工具链来编译呢?buildroot里面的那个工具链我试了确实就没问题了,但它又只有arm-linux-gcc,没有arm-linux-g++,不知道什么原因,好纠结。
离线
好的,我试一下
arm-linux-gnueabi-gcc --with-arch=armv4 --static
编译的时候, 加上这个指令试一试。
或者:
arm-linux-gnueabi-gcc --with-arch=armv5te --static
离线
建议用: arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
这个绝对可以的, 经过实战检验的:
whycan@ubuntu:/opt/arm-2014.05/bin$ ./arm-none-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/arm-2014.05/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/lto-wrapper
Target: arm-none-linux-gnueabi
Configured with: /scratch/maciej/arm-linux-2014.05-rel/src/gcc-4.8-2014.05/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__=2014 -D__CS_SOURCERYGXX_MIN__=5 -D__CS_SOURCERYGXX_REV__=29' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2014.05-29' --with-bugurl=https://sourcery.mentor.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/libc --with-gmp=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpfr=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpc=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-isl=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-cloog=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libitm --enable-libatomic --disable-libssp --enable-poison-system-directories --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin SED=sed
Thread model: posix
gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)
whycan@ubuntu:/opt/arm-2014.05/bin$
离线
谢谢晕哥,加了“-with-arch=armv4”或者“-with-arch=armv5te”都不行,提示没有这个选项,改成“-march=armv5te”倒是可以,但编译出来的可执行文件也运行不起来。
你发的这个工具链,是编译uboot、内核、根文件系统、应用程序都用这一个对吗?
离线
还可以直接在nano上直接使用gcc,不存在以上环境问题
离线
还可以直接在nano上直接使用gcc,不存在以上环境问题
这么厉害,还能在板子上编译程序,不过感觉不是很实用,哈哈。
离线
这么厉害,还能在板子上编译程序,不过感觉不是很实用,哈哈。
跑了debian,和使用ubuntu主机无差别
离线
建议用: arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
这个绝对可以的, 经过实战检验的:
whycan@ubuntu:/opt/arm-2014.05/bin$ ./arm-none-linux-gnueabi-gcc -v Using built-in specs. COLLECT_GCC=./arm-none-linux-gnueabi-gcc COLLECT_LTO_WRAPPER=/opt/arm-2014.05/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/lto-wrapper Target: arm-none-linux-gnueabi Configured with: /scratch/maciej/arm-linux-2014.05-rel/src/gcc-4.8-2014.05/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__=2014 -D__CS_SOURCERYGXX_MIN__=5 -D__CS_SOURCERYGXX_REV__=29' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2014.05-29' --with-bugurl=https://sourcery.mentor.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/libc --with-gmp=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpfr=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpc=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-isl=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-cloog=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libitm --enable-libatomic --disable-libssp --enable-poison-system-directories --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin SED=sed Thread model: posix gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29) whycan@ubuntu:/opt/arm-2014.05/bin$
晕哥,你好:
用了这个工具琏,编译完内核启动不了啊,原来gcc-linaro-7.2.1这个编译是能正常启动的,这个是什么原因呢?
离线
工具琏显示是这样的
ubuntu@VM-0-16-ubuntu:~/f1c100s$ arm-none-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/arm-2014.05/bin/../libexec/gcc/arm-none-linux-gnueabi/4 .8.3/lto-wrapper
Target: arm-none-linux-gnueabi
Configured with: /scratch/maciej/arm-linux-2014.05-rel/src/gcc-4.8-2014.05/confi gure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux- gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdc xx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --wit h-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind- tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__ =2014 -D__CS_SOURCERYGXX_MIN__=5 -D__CS_SOURCERYGXX_REV__=29' --enable-languages =c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit - -with-pkgversion='Sourcery CodeBench Lite 2014.05-29' --with-bugurl=https://sour cery.mentor.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sy sroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratc h/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/l ibc --with-gmp=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none -linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-li nux-gnu/usr --with-mpfr=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29 -arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i 686-pc-linux-gnu/usr --with-mpc=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-20 14.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/hos t-libs-i686-pc-linux-gnu/usr --with-isl=/scratch/maciej/arm-linux-2014.05-rel/ob j/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.ex tras/host-libs-i686-pc-linux-gnu/usr --with-cloog=/scratch/maciej/arm-linux-2014 .05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux- gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libit m --enable-libatomic --disable-libssp --enable-poison-system-directories --with- build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/ arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/maciej/arm-linux-201 4.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin SED=sed
Thread model: posix
gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)
ubuntu@VM-0-16-ubuntu:~/f1c100s$
离线
编译u-boot又出问题了,是不是这个编译工具太老了?
ubuntu@VM-0-16-ubuntu:~/f1c100s/u-boot$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4
*** Your GCC is older than 6.0 and is not supported
make: *** [checkgcc6] Error 1
make: INTERNAL: Exiting with 5 jobserver tokens available; should be 4!
离线
这个问题基本上 zImage不完整,或者 dtb文件错误。
我现在又全部再试一次,看看那里出问题了
离线
编译u-boot又出问题了,是不是这个编译工具太老了?
ubuntu@VM-0-16-ubuntu:~/f1c100s/u-boot$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4
*** Your GCC is older than 6.0 and is not supported
make: *** [checkgcc6] Error 1
make: INTERNAL: Exiting with 5 jobserver tokens available; should be 4!
对,要用 gcc 7.x
离线
用了 gcc 7.x 还是不行啊,这U-BOOT编译看来只能用gcc-linaro-7.2.1
ubuntu@VM-0-16-ubuntu:~/f1c100s/u-boot$ arm-none-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/arm-2014.05/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/lto-wrapper
Target: arm-none-linux-gnueabi
Configured with: /scratch/maciej/arm-linux-2014.05-rel/src/gcc-4.8-2014.05/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__=2014 -D__CS_SOURCERYGXX_MIN__=5 -D__CS_SOURCERYGXX_REV__=29' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2014.05-29' --with-bugurl=https://sourcery.mentor.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/libc --with-gmp=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpfr=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpc=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-isl=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-cloog=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libitm --enable-libatomic --disable-libssp --enable-poison-system-directories --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin SED=sed
Thread model: posix
gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)
ubuntu@VM-0-16-ubuntu:~/f1c100s/u-boot$ gcc --version
gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ubuntu@VM-0-16-ubuntu:~/f1c100s/u-boot$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4
*** Your GCC is older than 6.0 and is not supported
arch/arm/config.mk:69: recipe for target 'checkgcc6' failed
make: *** [checkgcc6] Error 1
ubuntu@VM-0-16-ubuntu:~/f1c100s/u-boot$
离线
7.x 可以编译新 u-boot的啊
离线
我编译的是u-boot-nano-lcd800480,不行呢?不知道为什么了?
7.x 可以编译新 u-boot的啊
离线
晕哥,你好:
使用arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2这个工具编译程序,还是运行不了?是那里有问题呢?uboot和内核不是用这个工具编译的。
主机log:
ubuntu@VM-0-16-ubuntu:~$ vi hello.c
ubuntu@VM-0-16-ubuntu:~$ arm-none-linux-gnueabi-gcc -o hello hello.c
ubuntu@VM-0-16-ubuntu:~$ ls
f1c100s hello hello.c
ubuntu@VM-0-16-ubuntu:~$
以下是板子lgo:
# ./hello
-sh: ./hello: not found
# ./hello
-sh: ./hello: not found
# ./hello
-sh: ./hello: not found
#
离线
我在24楼贴出来了log,GCC是7.X的,后面再编译UBOOT就出错了
不可能, 我的就是 7.x 编译的,大家都是用7.x
离线
离线
晕哥,你好:
主机log:
ubuntu@VM-0-16-ubuntu:~$ vi hello.c
ubuntu@VM-0-16-ubuntu:~$ arm-none-linux-gnueabi-gcc -o hello hello.c
ubuntu@VM-0-16-ubuntu:~$ ls
f1c100s hello hello.c
ubuntu@VM-0-16-ubuntu:~$#
arm-none-linux-gnueabi-gcc -o hello hello.c -static
离线
arm-none-linux-gnueabi-gcc -o hello hello.c -static
这样是可以了,但是程序的容量大了几百倍?buildroot编译出来的才不到10KB
离线
arm-none-linux-gnueabi-gcc 这个是 4.x 的
你要把这个 gcc 升级成 7.x
不是系统的GCC吗?工具琏的这个GCC要怎么升级呢?
离线
不是系统的GCC吗?工具琏的这个GCC要怎么升级呢?
http://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabi/
下载/解压/添加到PATH环境变量
离线
离线
标记,自己也入过同样的坑,
离线
@晕哥
我下载这个怎么有没有ARMv5?
用这个编译运行
# ./NuvotonGUIDemo
Illegal instruction
root@osboxes:/work/Lichee/helloword/emWin/Sample/GUIDemo# cd /work/Lichee/helloword/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin/
root@osboxes:/work/Lichee/helloword/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin# ./arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/work/Lichee/helloword/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin/../libexec/gcc/arm-linux-gnueabi/7.4.1/lto-wrapper
Target: arm-linux-gnueabi
Configured with: '/home/tcwg-buildslave/workspace/tcwg-make-release_0/snapshots/gcc.git~linaro-7.4-2019.02/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --with-system-zlib --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=soft --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/sysroots/arm-linux-gnueabi --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabi/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabi --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release_0/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: posix
gcc version 7.4.1 20181213 [linaro-7.4-2019.02 revision 56ec6f6b99cc167ff0c2f8e1a2eed33b1edc85d4] (Linaro GCC 7.4-2019.02)
root@osboxes:/work/Lichee/helloword/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin#
离线
arm-linux-gnueabi-gcc --with-arch=armv4 --static
编译的时候, 加上这个指令试一试。
或者:
arm-linux-gnueabi-gcc --with-arch=armv5te --static
error: unrecognized command line option ‘--with-arch=armv5te’; did you mean ‘-march=armv5te’?
root@osboxes:/work/Lichee/helloword/emWin/Sample/GUIDemo# make
/work/Lichee/helloword/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc --with-arch=armv5te -MD -O2 -D__Gui_NumBytes__=512000 -I. -I../../Config -I../../Include -Itslib -c Application/GUIDEMO_Automotive.c -o Application/GUIDEMO_Automotive.o
arm-linux-gnueabi-gcc: error: unrecognized command line option ‘--with-arch=armv5te’; did you mean ‘-march=armv5te’?
Makefile:34: recipe for target 'Application/GUIDEMO_Automotive.o' failed
make: *** [Application/GUIDEMO_Automotive.o] Error 1
离线
error: unrecognized command line option ‘--with-arch=armv5te’; did you mean ‘-march=armv5te’?
root@osboxes:/work/Lichee/helloword/emWin/Sample/GUIDemo# make
/work/Lichee/helloword/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc --with-arch=armv5te -MD -O2 -D__Gui_NumBytes__=512000 -I. -I../../Config -I../../Include -Itslib -c Application/GUIDEMO_Automotive.c -o Application/GUIDEMO_Automotive.o
arm-linux-gnueabi-gcc: error: unrecognized command line option ‘--with-arch=armv5te’; did you mean ‘-march=armv5te’?
Makefile:34: recipe for target 'Application/GUIDEMO_Automotive.o' failed
make: *** [Application/GUIDEMO_Automotive.o] Error 1
‘--with-arch=armv5te’ ====> ‘-march=armv5te’
离线
‘--with-arch=armv5te’ ====> ‘-march=armv5te’
试过之后错误变了:~~~~~~makefile没有加-static
# ./NuvotonGUIDemo
Segmentation fault
最近编辑记录 大帅 (2019-12-04 16:35:01)
离线
gdb 定位一下错误
@@还不会用gdb~~
离线
@@还不会用gdb~~
用arm-none-linux-gnueabi-gcc编译可以运行,但是emwin申请不到栈,就换Linux-gcc试试,一试就撞墙了~~
离线
哪位大神,告诉一下这个问题咋解决的
最近编辑记录 hong (2019-12-26 12:17:35)
离线
静态编译也不行,运行后没有输出segmentation fault,变成Illegal instruction了
现在在这个坑里,能说一下如何解决吗?
离线
我遇到和楼主一样的问题,这个其实根本原因是buildroot用的编译器和编应用程序的编译器不同导致的。因为你会用到标准库,标准库是buildroot的编译器编的。
buildroot我用的是4.x,就是他推荐自带的版本,我用这个编译器编应用完全没问题
离线
我遇到和楼主一样的问题,这个其实根本原因是buildroot用的编译器和编应用程序的编译器不同导致的。因为你会用到标准库,标准库是buildroot的编译器编的。
buildroot我用的是4.x,就是他推荐自带的版本,我用这个编译器编应用完全没问题
我现在也在这个坑里,请问, 是buildroot的版本要用 4.x 还是 gcc版本要 4.x ?
离线
按照晕哥的方法,安装低版本arm-none-linux-gnueabi-gcc 完美解决,而且可以和arm-linux-gnueabi-gcc 完美共存。
arm-none-linux-gnueabi-gcc -march=armv5te
离线
遇到同样问题,使用晕哥推荐编译器,静态编译后HELLOWORD可以跑起来,但是BIN文件太大。
动态编译,直接打印-sh: hi1: not found查看了一下,少libc.so.6的库,
我把编译器中的libc.so.6 与相关的软链接的库文件libc-2.18.so 放到/lib后。直接报"Segmentation fault“。
不明白问题在哪里?我有点搞晕了!
离线
我是用编译器目录的。不过我编译内核的编译器和buildroot的编译器不是同一个,不知道是不是有影响
离线
离线
我看了一下,编译器用的就是晕哥推荐的”arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2“;
buildroot 中使用的编译器也是这个;
离线
没有影响.
你用 buildroot 编译的文件系统?那你应该用 buildroot 的 out/target 目录里面的 libc 才对.
我想可能与内核的编译器有关。晚上我再把UBOOT,内核,buildroot 都使用晕哥推荐的重新编译一圈
离线
编译器版本问题,编译应用程序的版本要和编译根文件系统的一致。
离线
请参考https://whycan.cn/t_4266.html,补全运行库。
最近编辑记录 LinjieGuo (2020-05-05 17:46:44)
离线
建议用: arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
这个绝对可以的, 经过实战检验的:
编译 f1c100s 的文件系统只能用 2014.05-29 吗?能不能用更新的,感觉好老啊。
离线
建议用: arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
这个绝对可以的, 经过实战检验的:
ubuntu18.04 x64需要安装32bit的依赖包:
sudo apt-get install lib32ncurses5 lib32z1 -y
离线
建议用: arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
这个绝对可以的, 经过实战检验的:
whycan@ubuntu:/opt/arm-2014.05/bin$ ./arm-none-linux-gnueabi-gcc -v Using built-in specs. COLLECT_GCC=./arm-none-linux-gnueabi-gcc COLLECT_LTO_WRAPPER=/opt/arm-2014.05/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/lto-wrapper Target: arm-none-linux-gnueabi Configured with: /scratch/maciej/arm-linux-2014.05-rel/src/gcc-4.8-2014.05/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__=2014 -D__CS_SOURCERYGXX_MIN__=5 -D__CS_SOURCERYGXX_REV__=29' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2014.05-29' --with-bugurl=https://sourcery.mentor.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/libc --with-gmp=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpfr=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpc=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-isl=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-cloog=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libitm --enable-libatomic --disable-libssp --enable-poison-system-directories --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin SED=sed Thread model: posix gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29) whycan@ubuntu:/opt/arm-2014.05/bin$
一样问题,用晕哥说的 arm-2014.05-29-arm-none-linux-gnueabi 测试可以;
下了 arm-2014.05-29-arm-none-linux-gnueabi-i686-mingw32.tar.bz2
在windows下eclipse里编译app,放到板里能正常运行;
离线
请参考https://whycan.cn/t_4266.html,补全运行库。
我的是提示not found
后面解决了,依据帖子,gcc需要用buildroot output里面的gcc,然后添加c文件,-o test,然后编译出来就可以顺利运行了
荔枝派官方的文档实在太多坑,选了musl,但是U-boot又用gnu的编译器,这个应该才是最误导的地方
离线