您好!
如果作为另一个工程的编译依赖项的工程没有为给定段指定存储器范围、则链接器会生成警告。 但当最后一个链路发生时、是否会使用主工程针对那个段的范围?
谢谢!
据
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.
您好!
如果作为另一个工程的编译依赖项的工程没有为给定段指定存储器范围、则链接器会生成警告。 但当最后一个链路发生时、是否会使用主工程针对那个段的范围?
谢谢!
据
这用于使用旧得多的编译器构建的一系列项目、编译器本质上在命令行上运行。 它们包含各种对象、您可以怀疑主工程通过函数调用来访问这些对象。 链接器会自动调用、因为它用于我们更新的工程、该工程在相关工程中也没有链接器命令文件。 输出是 abs 文件、并且对于每个未指定的输出段都会出现警告。 我找到一个复选框、如果未选中该复选框、则会抑制警告。
主工程构建其文件、然后使用其 cmd 文件将其与相关工程的 ABS 文件链接在一起。
但所有这些都引发了一个问题、即相关项目中那些未指定的输出段会发生什么情况。 似乎它们最终被映射到主工程的 cmd 文件中的相应部分。
是这样吗?
谢谢!
据
输出是一个 ABS 文件
我不确定术语 ABS 文件的意思是什么。 请向我显示用于创建它的命令。 请复制并粘贴文本、但不要使用屏幕截图。
谢谢。此致、
-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.