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++编译器
我有一个基于 PA 音频示例的相当大的应用。 它在 K2G 上运行、ARM 和 DSP 都运行 TI-RTOS。 我最近收到了第三方库的更新、这会导致我的 DSP 应用链接失败。 我正在寻求帮助、以了解如何避免这种情况。
故障:
只需将新库添加到链接行中、就会出现几个"错误#10099-D:程序无法放入可用存储器"错误。 我在 config.Bld 中有一个相当复杂的存储器布局。 失败消息告诉我链接器无法放置与 ARM 共享的区域。 我对可能导致这种情况的原因进行了调查,但没有结果。 新库不会(就我所能告诉的内容而言)定义本节中的任何内容。 我已要求供应商提供使用 v8.1构建的库、但这不是唯一的问题。
请注意、我的 config.Bld 有三个部分。 第一部分描述了共享区域。 然后是 ARM 和 DSP 的说明、每个说明都是指共享区域。 排除此库时、所有操作都将起作用。
版本:
我一直在使用8.1版编译器。 此新库是使用 v8.2构建的。 我怀疑存在一些兼容性问题。 我已经尝试使用 v8.2构建我的应用程序、但它无法解决关键问题。 链接仍然失败。 此外、我会收到数十条警告#10278-D 8.2编译器的自述文件将其称为"新编译器"、建议进行一些更改、但我还没有找到具体原因。
我注意到的其他差异:
当我使用 nm6x 转储库内容时、我注意到一个差异、可能会向专家提出一些建议:
工作(较旧)的库有很多这类行:
0x00000000 A{C816A2B1-EAF8-4575-8BD6-1079DA21DDEF}
而新的则具有以下内容:
0x00000000 A TI2oI3mLqrt
这表明这种建筑的一些东西是不同的,但除了所有的调试材料,我发现没有吸烟枪。
虽然 Linux 实用程序"readelf"将转储有关 v2.2.2版本的信息、但相同的工具会报告
readelf:错误:m.lib:找不到有效的存档标头
同时、Linux 实用程序 objdump 会处理这两个文件。 每个文件都被报告为"文件格式 ELF32-Little "。
我的系统中的所有其他库都不能被"readelf"读取。
文件"ti-cgt-C6000_8.2.2/closed_fines.html"注意到"CodeGen-3597 ELF 头字段 e_phoff 在不存在程序头时应为0"。 但这并不能解释我的实际链路错误。
因为...
[引用 user="Chuck Peplinski "]将新库添加到链接行会导致多个错误"error #10099-D:program will not fit into available memory"错误。
(笑声) 更新后的库可能比以前使用更多的存储器。 请使用 CG_xml 包中的实用程序 secti 来估算库使用的内存量。 我说"估计"是因为这种方法测量了库中所有函数使用的内存量。 仅测量主应用程序实际调用的函数更准确。 但这种测量更简单、并且通常足够接近、可以进行类似这样的比较。 测量库的旧变体和新变体使用的内存。 如果它上升、则这可能是您问题的原因。
谢谢、此致、
乔治
抱歉。 在您的第一篇帖子中,我忽略了一个关键的细节...
[引用 user="Chuck Peplinski ]'我使用的是编译器的8.1版。 此新库是使用 v8.2构建的。 [/报价]
链接器的版本必须与用于编译链接中组合的所有目标文件和库的编译器版本相同或更新版。 链接器版本为8.1.x、但此库使用版本8.2.x 不支持此功能。 8.2.x 库可能(在本例中很可能)包含8.1.x 链接器无法识别的内容。
有两种解决方案。 将链接器升级到8.2.x 版或更高版本。 或者、将用于构建库的编译器降级到8.1.x 版 您已经尝试了第二种解决方案、它似乎正在工作。
谢谢、此致、
乔治