【问题标题】:How to build a cross compile NetBSD toolchain using NetBSD如何使用 NetBSD 构建交叉编译 NetBSD 工具链
【发布时间】:2016-03-02 19:55:51
【问题描述】:

我有一个使用 qemu 创建的 NetBSD VM,我正在尝试使用 NetBSD 源代码附带的 build.sh 脚本构建的交叉编译工具链来编译一个简单的 Hello World.c 程序。但是,我无法编译程序。

我使用以下命令构建了工具链,

./build.sh -m evbarm tools

./build.sh -m evbarm -U distribution

上述命令的输出结果,

===> Tools built to /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386
===> build.sh ended:   Sat Nov 28 12:52:34 CST 2015
===> Summary of results:
         build.sh command: ./build.sh -m evbarm tools
         build.sh started: Sat Nov 28 12:48:47 CST 2015
         NetBSD version:   4.0
         MACHINE:          evbarm
         MACHINE_ARCH:     arm
         Build platform:   NetBSD 4.0.1 i386
         HOST_SH:          /bin/sh
         No nonexistent/bin/nbmake, needs building.
         Bootstrapping nbmake
         TOOLDIR path:     /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386
         DESTDIR path:     /opt/cross/evbarm/usr/src/destdir.evbarm
         RELEASEDIR path:  /opt/cross/evbarm/usr/src/releasedir
         Created /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386/bin/nbmake
         makewrapper:      /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386/bin/nbmake-evbarm
         Updated /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386/bin/nbmake-evbarm
         Tools built to /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386
         build.sh ended:   Sat Nov 28 12:52:34 CST 2015
===> .


make distribution started at:  Sat Nov 28 14:31:23 CST 2015
make distribution finished at: Sat Nov 28 15:04:34 CST 2015
===> Successful make distribution
===> build.sh ended:   Sat Nov 28 15:04:34 CST 2015
===> Summary of results:
         build.sh command: ./build.sh -m evbarm -U distribution
         build.sh started: Sat Nov 28 14:31:20 CST 2015
         NetBSD version:   4.0
         MACHINE:          evbarm
         MACHINE_ARCH:     arm
         Build platform:   NetBSD 4.0.1 i386
         HOST_SH:          /bin/sh
         No nonexistent/bin/nbmake, needs building.
         Bootstrapping nbmake
         TOOLDIR path:     /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386
         DESTDIR path:     /opt/cross/evbarm/usr/src/destdir.evbarm
         RELEASEDIR path:  /opt/cross/evbarm/usr/src/releasedir
         Created /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386/bin/nbmake
         makewrapper:      /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386/bin/nbmake-evbarm
         Updated /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386/bin/nbmake-evbarm
         Successful make distribution
         build.sh ended:   Sat Nov 28 15:04:34 CST 2015
===> .

但是,当我尝试使用 nbmake-evbarm 包装器编译 helloARM.c 时,我得到以下输出,

$ nbmake-evbarm ./helloARM
/opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386/bin/arm--netbsdelf-gcc -O2   -Werror    -nostdinc -isystem /opt/cross/evbarm/usr/src/destdir.evbarm/usr/include    -o ./helloARM ./helloARM.c 
/opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386/lib/gcc/arm--netbsdelf/4.1.2/../../../../arm--netbsdelf/bin/ld: crt0.o: No such file: No such file or directory
collect2: ld returned 1 exit status

*** Failed target:  ./helloARM
*** Failed command: /opt/cross/evbarm/usr/src/tooldir.NetBSD-4.0.1-i386/bin/arm--netbsdelf-gcc -O2 -Werror -nostdinc -isystem /opt/cross/evbarm/usr/src/destdir.evbarm/usr/include -o ./helloARM ./helloARM.c 
*** Error code 1

Stop.
nbmake: stopped in /home/capin/apps

【问题讨论】:

    标签: c gcc4 netbsd


    【解决方案1】:

    不要将./ 路径前缀放在目标名称上。

    即运行:

    nbmake-evbarm helloARM
    

    我当然假设您在同一目录中有一个Makefile,至少看起来有点像这样:

    PROG = helloARM
    
    .include <bsd.prog.mk>
    

    你必须有这样一个使用标准 NetBSD 宏的本地 Makefile,因为当没有 makefile 时(或者当 makefile 没有使用正确的 NetBSD 宏,即 &lt;bsd.prog.mk&gt;)时,使用默认的 sys.mk 宏并且它们不包括访问目标系统的头文件和库等所需的所有 ${DESTDIR} 魔法。

    【讨论】:

    • 抱歉回复晚了,我现在又在搞乱这个 netbsd 工具链的交叉构建,你的步骤似乎是创建一个动态链接的二进制文件。再次感谢和欢呼?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2013-10-21
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多