【问题标题】:Position c library functions in specific memory将 c 库函数定位在特定内存中
【发布时间】:2013-11-13 07:11:28
【问题描述】:

是否可以使用 GNU GCC 编译器将特定的 C 库函数定位在指定的内存位置。

我正在使用 avr-gcc 来编译应用程序。这样做的确切目的是我需要编写一个包含对 fscanf 函数的调用的代码 sn-p,并且我希望此应用程序和相关函数的所有代码都应该在特定的地址范围内。

【问题讨论】:

    标签: c gcc linker static-libraries avr


    【解决方案1】:

    不是特定函数,但如果您可以控制库的源代码,则可以将函数放置在特定段中,然后使用linker script 将该段放置在特定位置。

    【讨论】:

    • 我想移动 fscanf 函数,是否可以定位一个 C 库函数(它已经编译)?
    • @ted 不幸的是没有。您不能使用链接器脚本访问单个函数,只能访问段。除非该功能已经在特定的段中,否则这是不可能的。这是非常不寻常的,通常所有代码段(来自您的程序和库)无论如何都放在内存中,您能否详细说明为什么您要将一些特定功能与其他功能分开放置的代码? (请参阅"What is the XY problem")。
    • 目标是将整个程序放到内存中的特定内存范围。在我的代码中,我正在调用 sscanf 函数。我能够将我写的主要函数放在一个特定的部分,比如 0x1E000,但我的问题是 sscanf 函数是在不同的内存中定义的,比如 0x200。我的目标是将所有代码放在 0x1E000 -> 0x1F000 范围内。
    • @ted 这是可能的,只需编写一个自定义链接器脚本(请阅读我的答案中的链接)并将所有 .text* 段放在所需的位置。这会将 所有 代码放在该内存位置。
    • 感谢@Joachim 我试图为 main 创建一个新部分并将其放置在内存中,因此链接器仅将主要内容放置在该部分中,而不是库函数。使用 .text 段放置它可以正常工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2011-10-03
    • 2021-09-25
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多