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.
工具与软件:
您好!
我刚刚注意到、我的安装(v 20.2.7.LTS)中不存在 ARM 模式运行时库"rtsv7R4_A_be_v3D16_eabi.lib"。 这里只有 Thumb 模式1。
PS C:\ti\ccs1270\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib> ls Directory: C:\ti\ccs1270\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 4/19/2024 4:41 PM src -a---- 8/7/2022 7:42 PM 70090 libc.a -a---- 8/7/2022 7:42 PM 2901 lnk.cmd -a---- 8/7/2022 7:42 PM 1761708 mklib -a---- 8/7/2022 6:33 PM 129151 mklib.c -a---- 8/7/2022 6:33 PM 431728 mklib.exe -a---- 8/7/2022 7:42 PM 27171858 rtsv5_A_le_eabi.lib -a---- 8/7/2022 7:42 PM 27132908 rtsv7A8_T_le_n_v3_eabi.lib -a---- 8/7/2022 7:42 PM 26734526 rtsv7M3_T_le_eabi.lib -a---- 8/7/2022 7:42 PM 26739346 rtsv7M3_T_le_xo_eabi.lib -a---- 8/7/2022 7:42 PM 26740806 rtsv7M4_T_le_eabi.lib -a---- 8/7/2022 7:42 PM 27021634 rtsv7M4_T_le_v4SPD16_eabi.lib -a---- 8/7/2022 7:42 PM 27047234 rtsv7M4_T_le_v4SPD16_xo_eabi.lib -a---- 8/7/2022 7:42 PM 26745466 rtsv7M4_T_le_xo_eabi.lib -a---- 8/7/2022 7:42 PM 27288528 rtsv7R4_A_le_v3D16_eabi.lib -a---- 8/7/2022 7:42 PM 26367286 rtsv7R4_T_be_eabi.lib -a---- 8/7/2022 7:42 PM 26597046 rtsv7R4_T_be_v3D16_eabi.lib -a---- 8/7/2022 7:42 PM 26962172 rtsv7R4_T_le_v3D16_eabi.lib
主题为 e2e.ti.com/.../10008-d-cannot-find-file-rtsv7r4_a_be_v3d16_eabi-lib
我们看到该文件位于版本20.2.1.LTS 中。
这是由于某些安装选项造成的吗?还是库已被删除?
谢谢!
您好、Varban、
您是对的、我也可以在20.2.5 LTS 中看到它
rtsv7R4_A_be_v3D16_eabi
在20.2.7LTS 中没有找到
让我与编译器团队核实、我会尽快提供更新。
——
谢谢、此致、
Jagadish。
您好、Varban、
以下是编译器团队对以下问题的反馈:
是的、在较新的编译器版本中特意将其删除。
编译器不再随附所有预编译的库。 它们仅随附几个常见的。 但是、RTS 的所有源代码都随编译器提供、因此如果确定它需要未预先编译的 RTS、则编译器将随后不停地构建。
这就是您在20.2.5安装中发生的情况。 请注意、在您的屏幕截图中、库具有不同于其他库的(较新)时间戳。 因为它不像其他编译器那样进行预编译。
编译器团队这样做是 为了减小编译器包的下载大小。
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish:
好吧、但是"rtsv7R4_T_be_v3D16_eabi.lib "是一个预编译库、我们将与其进行链接。
Building target: "GIO.out" Invoking: Arm Linker .... "../GIO/source/sys_link.cmd" -lrtsv7R4_T_be_v3D16_eabi.lib <Linking> Finished building target: "GIO.out" **** Build Finished ****
因此、stdlib/string/stdio 函数调用最终将在 Thumb 模式而不是纯 ARM 模式下执行。
使用 20.2.7.LTS、当我编译示例并将其反汇编时、我获得类似的内容(全部在.thumb 段中):
012a7e: memcpy: 012a7e: .thumb 012a7e: 2A00 CMP R2, #0 012a80: D04A BEQ _ret2_ [0x12b18] 012a82: EA5F0C00 MOVS.W R12, R0 012a86: 078B LSLS R3, R1, #30 012a88: D11C BNE _unaln [0x12ac4] 012a8a: 0783 LSLS R3, R0, #30 012a8c: D122 BNE _saln [0x12ad4] 012a8e: _aln:
012bb4: .thumb 012bb4: .text:fputc: 012bb4: 4A21 LDR R2, $C$CON1 [0x12c3c] 012bb6: B5F8 PUSH {R3, R4, R5, R6, R7, LR} 012bb8: 6812 LDR R2, [R2] 012bba: 460C MOV R4, R1 012bbc: 4605 MOV R5, R0 012bbe: 4790 BLX R2 012bc0: 4620 MOV R0, R4 012bc2: F000FA3B BL __TI_wrt_ok [0x1303c] 012bc6: 2800 CMP R0, #0 012bc8: 4E1D LDR R6, $C$CON2 [0x12c40]
012cbe: .thumb 012cbe: 2200 MOVS R2, #0 012cc0: __aeabi_memset4: 012cc0: __aeabi_memset8: 012cc0: __aeabi_memset: 012cc0: 4613 MOV R3, R2 012cc2: 460A MOV R2, R1 012cc4: 4619 MOV R1, R3 012cc6: memset: 012cc6: B571 PUSH {R0, R4, R5, R6, LR} 012cc8: F0100F03 TST.W R0, #3 012ccc: D00B BEQ _word_aligned [0x12ce6]
我仍然无法理解编译器团队的动机-考虑到小端字节序 RTS 存在、我不明白为什么 BE lib 也没有存在。 据我所知、我安装的 CCS 仅支持 Hercules、这是一个"硬接线"大端字节序的器件。
但是... 没关系。 让我们以这种方式总结一下我的请求:如果我想要一个纯 ARM (无 Thumb-free)可执行文件、有没有办法实现它? 我不介意编译源代码中的所有内容、并且不与任一.libs 连接、只要这是 Hercules 工具链环境中的一种"稳定"且推荐的方法即可。
谢谢!
Varban
您好、Varban、
我将与我们的编译器团队专家再次讨论您的问题、并会尽快提供我的更新信息。
——
谢谢、此致、
Jagadish。
有关非常类似的情况的讨论以及解决方法、请参阅 此论坛主题。
谢谢。此致、
-George.
您好、George:
那么... 如果我需要在 ARM 模式下使用 RTS、而不是 Thumb、那么我需要自己手动编译吗? 因为工具链的当前版本不会作为预编译的.lib 附带该工具链。
我能正确理解您吗?
最新动态:
设置" "选项中、CCS 为我创建了_a_库。
warning #10366-D: automatic library build: using library "C:\...\lib\rtsv7R4_A_be_v3D16_eabi.lib" for the first time, so it must be built. This may take a few minutes.
再次感谢你,并对困惑抱歉!