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.

[参考译文] 编译器/TM4C1290NCPDT:GCC - ASM 至 TI - CCS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/699187/compiler-tm4c1290ncpdt-gcc---asm-to-ti---ccs

器件型号:TM4C1290NCPDT

工具/软件:TI C/C++编译器

您好!  

现在、我进行了一次更深入的测试、遇到了一个问题。 编译器可以正常工作、但链接时会显示:

错误#16004-D:文件"/share/opt/ti/tm4c129/curve25519/libCurve25519.a "的 Tag_ABI_VFP_args 属性值为"0"、不同于先前看到的属性("1");合并不兼容的文件
错误#16012-D:文件"/share/opt/ti/tm4c129/curve25519/libCurve25519.a "不会保留8字节数据的8字节对齐、但其他输入文件需要这样做;文件不兼容

我为 gcc 设置了选项-mfloat-abi=hard -mfpu=fpv4-sp-D16

在"my TI 编译器使用 --float_support=FPv4SPD16编译"中   

在这里应该是相同的。 实际上根本不使用放气点。  

无论如何,这不起作用。 有什么想法吗?

此致

Micky

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

    您好、Michael、

    我不知道 libCurve25519.a 来自哪里、您能详细说明一下吗? 我不确定哪个团队参与帮助您解决此问题。

    有关如何构建它的任何文档都将很有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、
    请参阅 e2e.ti.com/.../684421中的历史记录
    libCurve25519是基于 gcc asm 源代码构建的、我希望它与 TI 编译器一起使用。

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

    要了解这种情况的发生方式、我们需要更多信息。  我假设您构建 libCurve25519库。  请指明您使用的 GCC ARM 编译器和 TI ARM 编译器的版本。  显示如何构建库、如何构建其中一个主源文件以及如何链接。  我需要查看所有编译器选项以及生成的所有诊断。  通过复制-粘贴提供所有这些内容。

    提供整个构建日志可能更容易。  在 CCS Console 视图中、使用 Copy Build Log 图标将视图的内容保存到文件中。 确保使用文件扩展名.txt。  将其附加到下一个帖子。

    谢谢、此致、

    乔治

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

    尊敬的乔治:  

    下面是编译器提示(我的项目的 TI 编译器带有 makefile):

    /share/opt/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.1.LTS/bin/armcl /share/opt/ti/tm4c129/curve25519 -me -g -diag_wrap=off --display_error_number --gen_func_subsections=on --abi=eabi --ual -DDEBUG -al -mv7M4 --code_status=16 --float_support=fpv4SPD16 -i="/share/opt/ti/tm4c129 /share/opt/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.1.LTS/include -i="/share/opt/ti/tm4c129/inc -mv7M4 --exctrab/cn/texports=-34,912v i_exports=-exctrab/it_exctrab/ip_defines=-ines=-express-ines"/content/cn/texctrab-ines=-express-intrab/net_express-ines=-intrab-express-dcp/net_express-dcs_express-/ip/net_exports=-express-dtrab-express-dtrab/net_express-cortexpress-corp/ip/ip/ip/net-ines=-exports=-ines=-cortexports=-ines=-ex 

    链接方式  

    /share/opt/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.1.LTS/bin/armcl /share/opt/ti/tm4c129/driverlib/lib /share/opt/ti/tm4c129/curve25519 obj/knxdev.odebug obj/startup.odebug obj/uartstdio.odebug obj/ustdlib.odebug--advice:power-g -gcc -define=ccs"-define=part_TM4C129ENCPDT -define=-define -g-g-gui=-example_libnestine-ram_ise-size_display-libg.in-gui=-guestin-gui=-in-gui_off-gui_prob.ine-ram_ram_ines=-gui=-in-gui_off-gui_prob.in-in-in-ines=-gui_prob.in-in-inese-gui_prob.in-es=-gui_probi-from-gui=-in-in-gui_prob.in-in-in-in-in-intrack-es=-in-in-in-gui_in-in-in-in-in-in-ese-/share/opt/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.1.LTS/lib 

    这里是 Lib 编译器/GNU v6.3.1 (Linaro)  

    **Build of configuration Release_GNU for project Curve25519 ****
    
    /share/opt/ti/ccs740/ccsv7/utils/bin/gmake
    
    
    
    /home/michi/workspace_v74/Curve25519 /share/opt/ti/ccs740/ccsv7/tools/compiler/gcc-arm-none-eabi-6-2017-q1-update/arm-none-eabi/include -k -j 8 all -O building file:".../x25519-cortex-m4-gcc"调用:GNU Compiler "/share/opt/ti/ccs740/ccsv7/tools/compiler/gcc-arm-none-eabi-6-2017-q1-update/bin/arm-none-eabi-gcc -c -mcpu=cortex-m4 -mc3 -mcumpv7e-mthump -mfloat-abi=m4-gcc-m4-gcc-m4-gmcr -mcr -mctrad-mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -g1519-mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -mcr -
    文件'objects.mk 在未来
    完成的编译中具有修改时间0、61s:"../x25519-cortex-M4-gcc.s"
    
    编译目标:"libCurve25519.A"
    调用:GNU Librarian
    "/share/opt/ti/ccs740/ccsv7/tools/compiler/gcc-arm-none-eabi-6-2017-q1-update/bin/arm-none-eabi-ar -r "libCurve25519.A"。/x25519-cortex-M4-gcc.o":
    创建
    时钟时钟时钟时钟时钟时钟时钟时、/share/opt/ti/ccs740/ccsv7/tools/compiler/gcc-arm-none-eabi-6-2017-q1-update/bin/arm-none-eabi-ar:创建时钟时钟时钟偏移。 您的构建可能不完整。
    完成构建目标:"libCurve25519.A"
    
    
    ****构建完成****
    

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

    我对什么是错误有很好的了解。  我可以向正确的方向指向您进行修复。  但是、我必须将修复的最终细节留给您。

    事实证明、仅构建选项不足以确定两个目标文件是否兼容。  为了确定两个目标文件是否兼容、链接器会检查 每个文件的构建属性。  要查看一个目标文件的构建属性,请使用实用程序 armofd...

    % armofd --obj_display=none、battrs file.obj
    <… 剪切...>
    Tag_cpu_arch 13 (ARM v7E-M)
    Tag_cpu_ar_profile 77 (微控制器配置文件)
    Tag_thum_ISA_use 2 (使用了一些 Thumb2指令)
    <... 依此类推...> 

    实用程序 armofd 附带 TI ARM 编译器安装。  《ARM 汇编工具手册》对此进行了说明。  -obj_display 的使用会将输出限制为构建属性。  将 file.obj 更改为要检查的文件的名称。  您可以对 GCC ARM 工具生成的目标文件使用 armofd。

    您将看到大约有30个构建属性。  并非所有这些都是从命令行选项派生的。  对于从未指定的属性,将使用默认值。  这些默认值可能与其他构建中使用的默认值不匹配。  在您的情况下、GCC ARM 汇编器选择的某些默认值与 TI ARM 编译器编译所需的默认值不匹配。

    在 GCC 汇编器中、指示编译属性值的方法是指令.eabi_attribute。  GCC 汇编器手册对此进行了说明。  该手册是 as.pdf 文件,其位置类似于...

    C:\ti\ccsv7\tools\compiler\gcc-arm-none-eabi-6-2017-q1-updates\share\doc\gcc-arm-no-eabi\pdf 

    遗憾的是、该文档仅显示裸语法、并列出了可用属性名称。  需要更多信息。  构建属性由 ARM EABI 标准指定、由 ARM Ltd.维护  该链接指向整个文档集的根。  导航到  ARM 架构文档 ABI 的附录和勘误表。  在该文档中搜索相关属性的名称、例如 Tag_abi_vfp_args

    这是我向您展示一些细节的重点、但我无法确定这些细节是否完全符合您的具体情况。  您可能必须对内容进行一些调整。

    [引用 USER="Michael Schuster">错误#16004-D:文件"/share/opt/ti/tm4c129/curve25519/libCurve25519.a "的 Tag_ABI_VFP_args 属性值为"0"、不同于先前看到的属性("1");合并不兼容的文件

    这里的问题是属性 Tag_abi_vfp_args  (足够简单)。  要解决此问题,请将此指令添加到 GCC ARM 汇编源...

    .eabi_attribute Tag_abi_vfp_args、3.
    

    我不确定此属性的值。  使用的值3与错误诊断中显示的任何一个值不匹配。  但是、这就是我在检查使用 TI ARM 构建选项构建的简单 C 文件时看到的值。   

    [引用 user="Michael Schuster">错误#16012-D:文件"/share/opt/ti/tm4c129/curve25519/libCurve25519.a "不保留8字节数据的8字节对齐、但其他输入文件需要这样做;不兼容的文件

    这里的问题是属性  Tag_abi_align_proerved。  我通过试验与对齐相关的构建属性来找到它。  很抱歉、但我不清楚文档。  要解决此问题,请将此指令添加到 GCC ARM 汇编源...

    .eabi_attribute Tag_abi_align_erved、1. 

    警告:通过向汇编代码添加构建属性、您可以向链接器(无论是 TI 链接器还是 GCC 链接器)保证此文件中的所有代码都遵守该构建属性的规范。  如果构建属性与代码的实际工作方式不匹配、则在运行时将会发生难以诊断的静默故障。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的乔治:
    非常感谢您的支持。 这解决了我的问题、库现在会进行链接、看起来工作正常。

    此致
    Micky