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.

[参考译文] 编译器/TMS320F2.8335万:编译/链接库(.libs )时未使用的函数

Guru**** 2538930 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/572434/compiler-tms320f28335-unused-function-when-compiling-linking-libraries-libs

部件号:TMS320F2.8335万

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

我有一个关于Flash2.8335万_API_V210.lib和rts2800_fpu32.lib库的使用问题,这些库正在我们的程序中使用。 程序不调用的库函数会发生什么情况? 这些功能是否链接并内置于图像中,或者它们是否未包含在最终图像中?  

C2000编译器toolchain 5.2 1正与3.3 CCS一起使用

谢谢!

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

    可以说,库中未调用的函数被排除在最终图像之外,这种说法很接近,但并不十分精确。

    准确地说: 库中的文件(不是函数)定义了主应用程序代码(无论是直接还是间接)所使用的任何符号,它们都被排除在最终图像之外。  请考虑一个示例。  假定库文件包含两个函数:

    int is_called(){/* code here */}
    int never被调用(){/* code here */} 

    假定主应用程序代码调用is_called,但不是never被调用。  然后将整个文件进入链接。  在此处未描述的情况下,链接程序的其他功能可能会在以后删除never调用。  但是,将讨论限制在库中的内容,这两个函数都是进来的。

    谢谢,此致,

    -George

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

    请进一步说明链接器的功能,这些功能将从已使用函数的库文件(如上面的示例)中删除未使用的函数吗?

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

    如果源文件是使用选项--gen_func_Subsections(-gen_func_Subsection)生成的,链接程序将删除函数never调用。  C2000编译器手册 介绍了选项--gen_func_Subsections.  此描述包括一个库示例,与我在上一篇文章中提供的示例类似。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    链接器在部分上运行,而不是在函数上运行。 链接程序可以并且确实可以消除未使用的部分。 如果某个未使用的函数本身位于某个节中,则链接程序可以将其删除。 如果未使用的函数与所需函数位于同一节中,则链接器必须包含该节,从而拖动未使用的函数。