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.

[参考译文] 编译器/RM48L950:ARMCL -如何在不引用代码的情况下将库静态链接到可执行文件?

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/634708/compiler-rm48l950-armcl---how-to-statically-link-library-into-executable-without-code-referencing-it

部件号:RM48L950

工具/软件:TI C/C++编译器

我们正在使用armcl版本16.9 .0.LTS。
www.ti.com/.../spnu151q.pdf

我们有一个具有动态代码分析功能(CTC ++)的静态库,我们希望将其包含在我们编译的可执行文件中
可执行文件的代码不是用来引用它的,也不是必需的。
我们使用gdb作为调试器来运行可执行文件并启动其主循环,在执行任务后,我们使用gdb访问库中的CTC函数,以概述执行了哪些函数。

对于x86版本的代码,我们使用gcc编译器和这些特定的链接器选项来指示gcc保留库:
library =-L$(CTC) LIB_PATH)-WL,--whole - archive -lctc_hota -WL,--no-whole - archive

问题:
如何使用armcl编译器实现同样的效果?
由于优化原因,编译器目前可能已排除库。
我们按以下顺序使用这些标志:
-O0ff
-z
--search_path=/dir --library=filename.a

编译器输出没有明确提到它找到了库,但选择忽略它。 是否可以启用此类选项以显示?

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    本手册第76页的内容如下:
    "当您将库指定为链接器输入时,链接器只包括并链接那些解析未定义引用的库成员。"

    就我们的具体情况而言,这不是我们想要的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们决定向库中添加一个空函数,并从代码中调用该函数,以强制链接器加载到库的其余部分。
    解决了这一问题,因为必须更改可执行代码:不是我们想要的。

    在此过程中,我们注意到,不幸的是,-Ooff的优化步骤不像宣传的那样工作。
    使用这样的函数调用会导致链接发生:
    ctc_linking_armcl();

    使用NM列出目标文件中的符号可显示所有可用的CTC库函数。

    使用这样的函数调用,将导致不发生链接:
    IF (FALSE){CTC链接_armcl ();}

    使用NM列出目标文件中的符号显示没有可用的CTC库函数。

    从第页的文档中:
    --opt_level=off或-off:
    不执行优化
    --opt_level=0或-o0:
    消除未使用的代码


    使用-Ooff时,我们预计低于while (1)或IF (FALSE)内的代码不会得到优化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在使用其他选项时,也会出现上述情况:
    --unused_section_elimination=off
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    遗憾的是,没有任何选项可以从库中导入每个文件。  使用链接程序选项--UNDEF_SYM=name_of_symbol。  请在 支撑臂装配工具手册中阅读更多相关信息。  在您的情况下,库中的每个符号都需要--UNDEF_SYM。  我意识到这很不方便。  但这是唯一的解决办法。  我建议您将所有--UNDEF_SYM选项放在一个链接程序命令文件(普通文本文件)中,该文件称为force_library_functions.cmd。  然后将该文件提供给链接器,就像任何其他文件一样。

    谢谢,此致,

    -George

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

    您好,George,

    我们一定会研究这个问题。 感谢您的回答!

    此致