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.
工具/软件: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 来自哪里、您能详细说明一下吗? 我不确定哪个团队参与帮助您解决此问题。
有关如何构建它的任何文档都将很有帮助。
要了解这种情况的发生方式、我们需要更多信息。 我假设您构建 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 链接器)保证此文件中的所有代码都遵守该构建属性的规范。 如果构建属性与代码的实际工作方式不匹配、则在运行时将会发生难以诊断的静默故障。
谢谢、此致、
乔治