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.

[参考译文] TMS320F2812:没有构建依赖项 Cmd 文件时的链接器行为

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1232927/tms320f2812-linker-behavior-in-the-absence-of-build-dependency-cmd-file

器件型号:TMS320F2812

您好!

如果作为另一个工程的编译依赖项的工程没有为给定段指定存储器范围、则链接器会生成警告。  但当最后一个链路发生时、是否会使用主工程针对那个段的范围?

谢谢!

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

    我需要更多地了解相关项目和主项目之间的关系。  通常、相关工程会构建目标文件库。  无链路发生。  主工程会从依赖工程调用库中的函数(有时使用数据、但这种情况不太常见)。   

    这不是它在你的情况下的工作方式。  如何工作?  为什么呢?

    谢谢。此致、

    -George.

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

    这用于使用旧得多的编译器构建的一系列项目、编译器本质上在命令行上运行。  它们包含各种对象、您可以怀疑主工程通过函数调用来访问这些对象。  链接器会自动调用、因为它用于我们更新的工程、该工程在相关工程中也没有链接器命令文件。  输出是 abs 文件、并且对于每个未指定的输出段都会出现警告。  我找到一个复选框、如果未选中该复选框、则会抑制警告。

    主工程构建其文件、然后使用其 cmd 文件将其与相关工程的 ABS 文件链接在一起。

    但所有这些都引发了一个问题、即相关项目中那些未指定的输出段会发生什么情况。  似乎它们最终被映射到主工程的 cmd 文件中的相应部分。

    是这样吗?

    谢谢!

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

    我不确定术语 ABS 文件的意思是什么。  请向我显示用于创建它的命令。  请复制并粘贴文本、但不要使用屏幕截图。

    谢谢。此致、

    -George.

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

    对不起 George。  ABS 文件在 C2000 Linker->Basic Options->Specify output file name (--output_fie、-o)下的对话框中指定。

    我将默认输出类型更改为 abs、以便与旧版链接器和我们较新项目的输出文件类型相匹配。  我应该使用其他东西吗?

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

    对于依赖项目、请重新编译整个项目。  实现该操作的一种方法是右键点击工程名称并进行选择 重新生成项目 。  然后将"Console"(不是"Problems")视图的内容保存到文本文件。  使用名为的图标 复制构建日志 。  为日志文件命名时,请确保使用文件扩展名 .txt 。  请 在下一篇文章中附加该文本文件。

    谢谢。此致、

    -George.

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

    为了保护我们的 IP、我更改了名称并删除了许多输出、因为除了名称外、它们都是相同的。  我还删除了主项目中的链接错误、该项目将是另一个线程的主题。  此外,我可以看到一种附加图片的方法,但不能是 txt 文件。  我将它们复制到下面。

    谢谢!

    相关文件输出


    ****构建项目的配置调试 ****

    "C:\\ti\\ccs1040\\ccs\\utils\\bin\\gmake"-k -j 8 all -O

    构建文件:"../ .CPP"
    调用:C2000编译器
    "c:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/bin/cl2000 -v28 -ml -mt -cla_support=cla1 --float_support=softlib --fp_mode=relaxed --fp_reassoc=off --include_path=" / "--include_path="C:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/include --advice:performance=all -g --c99 --cpp_default --float_operations_allowed=32 --printf_support=minimal --diag_warning=225 --diag_wrap =off --display_error_number --gen_func_subsections=on .d_raw""../ .CPP"
    已完成建设:"../ .CPP"

    构建文件:"../ .CPP"
    调用:C2000编译器
    "c:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/bin/cl2000 -v28 -ml -mt -cla_support=cla1 --float_support=softlib --fp_mode=relaxed --fp_reassoc=off --include_path=" / "--include_path="C:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/include --advice:performance=all -g --c99 --cpp_default --float_operations_allowed=32 --printf_support=minimal --diag_warning=225 --diag_wrap =off --display_error_number --gen_func_subsections=on .d_raw""../ .CPP"
    已完成建设:"../ .CPP"

    等等...

    构建目标:" .ab"
    调用:C2000链接器
    "c:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/bin/cl2000 -v28 -ml -mt -cla_support=cla1 --float_support=softlib --fp_mode=relaxed --fp_reassoc=off --advice:performance=all -g --c99 --cpp_default --float_operations_allowed=32 --printf_support=minimal .map"-i"C:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/lib -i"C:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/include --reread_libs --disable_auto_rts --diag_wrap =off --display_error_number --relocatable --xml_link_info=" _linkInfo.xml"--rom_model -o " .abs""./ .obj""./ .obj"等... "../ .cmd"-llibc.a

    已完成建设目标:" .ab"

    ****构建完成****

    主工程输出


    ****构建项目的配置调试 ****

    "C:\\ti\\ccs1040\\ccs\\utils\\bin\\gmake"-k all

    构建文件:"../ .CPP"
    调用:C2000编译器
    "C:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/bin/cl2000 -v28 -ml -mt --include_path="C: / "--include_path="C:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/include --advice:performance=all -g --c99 --c++03 --relaxed_ansi --cpp_default --float_operations_allowed=32 --printf_support=minimal --diag_warning=225 --diag_wrap =off ---display_error_number .d_raw""../ .CPP"
    已完成建设:"../ .CPP"

    >>编译失败
    Makefile:203:目标的食谱' .out'失败
    gmake:***[ .out]错误1
    gmake:由于错误、未重制目标"all"。

    ****构建完成****

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

    感谢您生成日志。  我明白你所说的 ABS 文件是什么意思。  是由链接器创建的可执行 COFF 文件。  典型的文件扩展名为 输出 。  死区时间 .abs 但是。  除此之外、它们是相同的。

    构建日志不会显示如何在主工程中使用 abs 文件作为输入。   

    我仍然认为、如果相关工程编译的是库、而不是可执行 COFF 文件、会更好。  然后、主项目将链接到该库。  这更简单、避免了依赖项目如何链接的整个问题。  我应该向您展示如何操作吗?

    谢谢。此致、

    -George.

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

    是的,请!

    谢谢!

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

    无法将创建可执行 COFF 文件的现有工程更改为创建库的工程。  您必须启动一个新项目。   

    首先要学习  CCS 在线文档的"Creating a New CCS Project"部分。  了解命名的设置  输出类型 。  共模扼流圈  静态库 。  下面是一个屏幕截图...

    之后、它与您现在拥有的项目非常相似。  源文件、编译器选项等是相同的。  由于您不进行链接、因此没有链接器设置。  构建的最后一个方法是运行一个工具、这个工具被称为归档器、来创建包含所有目标文件的库。  C28x 工具中的归档器进行命名 AR2000 。  我认为您不需要它如何工作的详细信息。  但如果您需要、 请在 C28x 汇编工具手册 中搜索标题为" 归档器说明"的章节。  

    接下来、请参阅  CCS 联机文档的"工程依赖项"部分、了解如何在两个工程之间建立依赖项连接。  请注意有关库条目如何不会自动添加到主工程的部分。  有关 该步骤的详细信息、请参阅该论坛主题。

    如果这一切看起来令人生畏,那么我建议你首先尝试它与两个玩具项目。  一个是主工程、另一个是依赖库工程。  让主项目从库项目中调用一个函数。  只需将其全部构建干净即可。  它不必运行。  然后从那里向上扩展。

    谢谢。此致、

    -George.

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

    这似乎是有效的。  新编译器在旧代码中发现了一些问题、并且我已经解决了这些问题。  还有两个问题我认为与这一主题无关。  感谢你的帮助乔治。