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.

[参考译文] TMDS64EVM:链接器错误:"pruabi"

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1639873/tmds64evm-linker-error-pruabi

器件型号: TMDS64EVM

在为 PRU 编译和链接 C 代码时、我遇到了一个未定义的符号链接器错误、缺少符号“__pruabi_remu“的定义、这是由代码块中的条件语句引起的:

if (framecount % 1000 == 0)

    *PRU1_MINOR_FRAME_CNT =帧计数;
}

从我看到的,我缺少一些必需的库文件,“pruaib“或类似的东西,但在我的安装或在线找不到任何类似的文件。 对在哪里找到它有什么建议吗?

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

    你(们)好

    可以共享 makefile 或正在使用的链接器命令吗?

    此致

    Dhaval

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

    我正在使用 SDK 示例中的链接器文件、并且 makefile 是在我编译时由 CCS 自动生成的、但在这里它们已附加。 (我更改了文件扩展名,因此 E2E 论坛允许我上传文件)

    e2e.ti.com/.../7140.makefile.txt

    e2e.ti.com/.../7140.linker_5F00_cmd.txt

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

    你(们)好
    很抱歉这里延迟了回复。

    “--disable_auto_rts“标志阻止链接器自动拉入 PRU 运行时支持库libc.a()、该库包含 __pruabi_remu 和其它算术辅助函数。 如果没有此库、任何需要运行时支持的 C 操作都将产生未定义的符号错误。

    固定选项:

    选项 A—删除 --disable_auto_rts (最简单)

    在 CCS 工程的链接器设置中、删除 --disable_auto_rts 标志、除非出于任何特定原因添加了该标志。 这使链接器能够在 PRU 编译器安装中自动找到并链接正确的运行时库。

    选项 B—手动链接 libc.a

    如果 --disable_auto_rts 出于其他原因需要、请通过添加 -llibc.a 链接器标志来将运行时库显式添加到链接器命令中。 使用通用名称 libc.a 允许链接器自动为您的构建配置选择正确的库变体。

    在 CCS 中、您可以在 Project Properties→Build→PRU Linker→File Search Path→Include library file 下添加该路径

    此致

    Dhaval

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

    对于未来的读者、

    这是 OpenPRU 存储库较旧的 C 项目中的一个错误、已在 v2026.1.0 中修复。

    在标签 v2026.0.0 上、您可以看到-disable_auto_rts 是从汇编项目复制到 CCS 导入的 C 工程设置中:
    https://github.com/TexasInstruments/open-pru/blob/v2026.00.00/examples/empty_c/firmware/am64x-evm/icss_g0_pru0_fw/ti-pru-cgt/example.projectspec

    但是、在 tag v2026.1.0 上、我更新了存储库中所有项目的 example.projectspec:
    https://github.com/TexasInstruments/open-pru/blob/v2026.01.00/examples/empty_c/firmware/am64x-evm/icss_g0_pru0_fw/ti-pru-cgt/example.projectspec

    如果您看到将工程导入到 CCS 中有任何其他问题、请告知我们以便我们进行查看。

    此致、

    Nick

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

    很抱歉、我无意中将其设置为“解决了我的问题“、但现在只是重新尝试、选项 A 和选项 B 都不起作用。

    当我尝试选项 A 时、我的构建错误没有任何变化:

    构建目标:“ICSSG1_PRU0_AFDX.out“
    调用:PRU 链接器
    “c:/ti/ti_cgt_pru_2.3.3/bin/clpru -v4 -Ooff -define=SOC_AM64X --define=_debug_=1 --define=slicE1 -g -diag_warning=225 -diag_pwrap=off -diag_error=off -display_error_error=little -z -m“abi=ti“-heap_size=0x100


    未定义首次引用
    符号
    ----- ------------------------
    __pruabi_mpyi ./PRU_Scheduler.obj


    当我尝试选项 B 时、收到一个链接器找不到“libc.a“的额外构建错误:

    构建目标:“ICSSG1_PRU0_AFDX.out“
    调用:PRU 链接器
    “c:/ti/ti_cgt_pru_2.3.3/bin/clpru -v4 -Ooff -define=SOC_AM64X --define=_debug_=1 --define=slicE1 -g -diag_warning=225 -diag_pwrap=off -diag_error=off -display_error_error=little -z -m“abi=ti“-diag_size=0x100

    错误#10008-D:找不到文件“libc.a“

    未定义首次引用
    符号
    ----- ------------------------
    __pruabi_mpyi ./PRU_Scheduler.obj

    要解决此问题、需要执行额外的步骤。 在 Project Properties→Build→PRU Linker→File Search Path→ Add 下

    对于库搜索路径、 我还必须将条目添加到:

    C:\ti\cgt_PRU_2.3.3\include

    C:\ti\cgt_PRU_2.3.3\lib

    这些文件路径添加与手动 添加“libc.a“配对、可解决错误。 谢谢。