This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM3358:ti-processor-sdk-linux-am335x-evm-09.01.00.001的 Linux-devkit 编译代码失败

Guru**** 2525970 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1306470/am3358-linux-devkit-compile-code-failed-for-ti-processor-sdk-linux-am335x-evm-09-01-00-001

器件型号:AM3358

您好专家:

我安装了 ti-processor-sdk-linux-am335x-evm-09.01.00.001来构建我的示例代码。

似乎 工具链前缀已从 arm-none-linux-gnueabihf (ti-processor-sdk-linux-am335x-evm-08.02.00.24)更改为  arm-oE-linux-gnueabi (ti-processor-sdk-linux-am335x-evm-09.01.001)

因此、我尝试使用  arm-oe-linux-gnueabi-gcc 来编译我的测试代码。

我遇到了如下所示的故障、但  ti-processor-sdk-linux-am335x-evm-08.02.00.24中没有问题

[linux-devkit]:~/test/example > arm-oE-linux-gnueabi-gcc -o helloworld helloworld.c
在/home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/armv7at2hf-neon-oe-linux-gnueabi/usr/include/gnu/stubs.h:23包含的文件中、
来自/home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/armv7at2hf-neon-oe-linux-gnueabi/usr/include/features.h:514、
来自/home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/armv7at2hf-neon-oe-linux-gnueabi/usr/include/bits/libc-header-start.h:33、
来自/home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/armv7at2hf-neon-oe-linux-gnueabi/usr/include/stdio.h:27、
从 helloworld.c:1:
/home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/armv7at2hf-neon-oe-linux-gnueabi/usr/include/gnu/stubs-32.h:7:11:致命错误:gnu/subs-soft.h:没有这样的文件或目录
7|#包括
|^~~~~~~~~~~~~~~~~~
编译终止。

"我怎么会有这种感觉呢?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    建议的开发主机环境是 Ubuntu 22.04您是否在同一版本?

    在9.x (对于 kirkstone SDK)中,我们使用 Yocto/OE distro 提供的默认工具链。  

    无法评论您的示例 helloworld 测试程序,但您需要浏览 https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html 并提供必要的参数来构建程序。  在 root 导致之后,请查看 meta-arm@lists.yoctoproject.org 以了解工具链相关主题。

    在线搜索和阅读上面提供的 ARM 选项手册,给出提示"-mfloat-abi=hard"可能可行.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Praneeth:

    谢谢你的忏悔,

    我使用 Ubuntu 18.04来构建它。

    我只需访问 https://software-dl.ti.com/processor-sdk-linux/esd/AM335X/09_01_00_001/exports/docs/linux/Overview/GCC_ToolChain.html
    要创建  HelloWorld.c 并构建它。

    #包含 
    
    int main(){ 
    printf ("Hello World 来自 TI!!!\n"); 
    返回0;} 
    

    以下是我的构建命令、

    1.源文件 linux-devkit/environment-setup 

    2.~/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-oe-linux-gnueabi/arm-linux-gnueabi-gcc helloworld.c -o lowhellorld

    然后我得到了失败结果。

    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/armv7at2hf-neon-oe-linux-gnueabi/usr/include/gnu/stubs-32.h:7:11:致命错误:gnu/subs-soft.h:没有这样的文件或目录

    如果我更改带选项的命令

    ~/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-OE-linux-gnueabi/arm-linux-gnueabi-gcc helloworld.c -o helloworld -mfpu=neon -mfloat-abi=hard ABI

    我获得了  

    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到 crt1.o:没有此类文件或目录
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到 crti.o:没有此类文件或目录
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到 crtbege.o:没有此类文件或目录
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到-lgcc:没有这样的文件或目录
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到-lgcc_s:没有这样的文件或目录
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到-lc:没有这样的文件或目录
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到-lgcc:没有这样的文件或目录
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到-lgcc_s:没有这样的文件或目录
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到 crtend.o:没有这样的文件或目录
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到 CRTN.o:没有这样的文件或目录
    collect2:错误:LD 返回1个退出状态

    但08.02.00.24不存在此类问题

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下是最近的工作示例、请注意它是如何使用$CC 进行交叉编译的:

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1309564/sk-am62a-lp-compile-c-files-using-aarch64-oe-linux-gcc/4975383#4975383

    这也与我们一些有关其他器件的 Linux SDK 文档中讨论的方式相一致、请参阅 https://software-dl.ti.com/processor-sdk-linux/esd/AM62AX/09_01_00/exports/docs/linux/Overview/GCC_ToolChain.html#linux-devkit

    ...以及它是如何描述在我们的"Linux 学院" 的文档,见同样的主题,但 AM62x 例如( AM335x 设备没有"Linux 学院") https://dev.ti.com/tirex/explore/node?node=A__ATQnwE0K3ox3NhHt8iO5lQ__AM62-ACADEMY__uiYMDcq__LATEST

    看起来像 AM335x 之类的选定器件具有该特定文档的旧部分。

    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/x86_64-arago-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/11.4.0/ld:找不到 CRTN.o:没有这样的文件或目录
    collect2:错误:LD 返回1个退出状态

    但08.02.00.24不存在此类问题

    [/报价]

    从 SDK v9.x 开始、仅支持通过$CC 使用、这意味着您需要在其他工具链参数中手动指定-- sysroot、这是在使用$CC 时自动完成的。 此更改可能与我们从 SDK v8.x 迁移到 SDK v9.x 时所做的常规工具链更改有关。

    我提出了一个内部问题 SITSW-3605、以便针对当前具有非工作指令(如 AM335x)的器件更新我们的文档。

    此致、Andreas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     Andreas、您好:

    感谢您的答复和提示。

    我现在得到了答案、


    如果我只使用$CC 进行编译、  
    /home/zh/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/armv7at2hf-neon-oe-linux-gnueabi/usr/include/gnu/stubs-32.h:7:11:致命错误:gnu/subs-soft.h:没有这样的文件或目录
    7|#包括

    解、如下所示。

    1.源代码环境设置

    2. arm-oE-linux-gnueabi-gcc $CFLAGS helloworld.c -o helloworld

    3. $CC helloworld.c -o helloworld -mfpu=neon -mfloat-abi=hard

     

    非常感谢。

    此致、
    宜芳

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.源代码环境设置

    2. arm-oE-linux-gnueabi-gcc $CFLAGS helloworld.c -o helloworld

    3. $CC helloworld.c -o helloworld -mfpu=neon -mfloat-abi=hard

    [/报价]

    作为参考、最佳/最干净的方法可能是这两种方法的组合、因此我们只依赖于提供的变量、而不是尝试重新创建标志列表、而可能忘记了一些...

    # List all the compuiler flags that should be used
    [linux-devkit]:~/ti/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit> echo $CFLAGS 
    -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=/home/a0797059/ti/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit/sysroots/armv7at2hf-neon-oe-linux-gnueabi
    
    # THIS is how we should document it in the SDK  docs for AM335/AM437x
    [linux-devkit]:~/ti/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit> $CC $CFLAGS hello_world.c -o hello_world
    
    # All worked
    [linux-devkit]:~/ti/ti-processor-sdk-linux-am335x-evm-09.01.00.001/linux-devkit> file hello_world
    hello_world: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=6c861fdcc13bfb38b4f3ce0b7274b9ce0cd5db1e, for GNU/Linux 3.2.0, with debug_info, not stripped

    我在内部提交了一个额外的问题报告(SITSW-4302)、以便在 AM335x/AM437x 的 SDK 文档中以这种更加集中的方式进行修复。

     此致、Andreas