当前位置: 首页 > 知识库问答 >
问题:

gcc/diab:保留未使用的功能/部分

史修谨
2023-03-14

我有一个项目,我想在链接阶段保留某些功能/部分。

我试过:

static void stub_enforcer(void) __attribute__ ((used))

但这是针对编译器的,而不是针对链接器的。

现在链接器负责并使用了-gc部分,我想保留的功能“消失了”:(

Removing unused section '.text.func2' in file './src/func2.o'

如何指示链接器不删除所需的函数。

我想这样做的原因是函数的后期构建用法,通过改变二进制文件上的内容。

共有1个答案

凌成天
2023-03-14

我通过控制LD脚本找到了解决方案,

我已经将stub\u enforcer放在一个节中,并使用KEEP()命令确保链接器不会抛出它。

它起作用了。

 类似资料:
  • 我现在尝试创建一个运行STM32F0xx MCU的固件映像。它类似于flash算法,提供一些函数调用来控制STM32F0xx MCU引脚,但它比flash算法更复杂。所以它将使用STM32 HAL lib和Mbed lib。 编译器/链接器使用“-ffunction sections”和“-fdata sections”标志。 所以我使用“attribute((used))”尝试将函数保留在固件映

  • #include <stdio.h> union Type { int a; int *b; }; int main() { printf("sizeof(union Type) is %lu\n", sizeof(union Type)); return 0; } 技巧 使用gcc -g编译生成的程序,是不包含union Type的符号信息: (gdb) p sizeof(

  • 问题内容: 假设我编写了一个装饰器,它执行了非常通用的操作。例如,它可能会将所有参数转换为特定类型,执行日志记录,实现备忘录等。 这是一个例子: 到目前为止一切都很好。但是,有一个问题。装饰的函数不保留原始函数的文档: 幸运的是,有一种解决方法: 这次,函数名称和文档是正确的: 但是仍然存在一个问题:函数签名是错误的。信息“ * args,** kwargs”几乎没有用。 该怎么办?我可以想到两个

  • 问题内容: 我有一个使用AJAX加载新php文件并更新显示的单页网站。 我从主页开始php会话,但是当我使用ajax更新内部html时,我需要这些会话变量来加载新的php文件。 这篇文章与此类似:PHP会话变量未保留。但是我检查了一下,我的php.ini有 主页PHP: 在用户输入之后,我使用ajax调用php文件并加载页面的一个小节: 有人可以告诉我我缺少哪些重要步骤吗?谢谢。 更新: 在主页和

  • 我正在尝试将一个xml文件保存到Android的内部存储中。但是,该文件没有得到保留。每次我重新启动模拟器时,该文件都会是空的。只有当我在应用程序中手动选择向其写入内容时,该文件才会被写入内容。然后,如果我关闭应用程序或其他什么,文件内容会被保留。但是,当我关闭模拟器时,文件会在那里,但是空的。 因此,我不确定我是否正确地保存了它。 请看看我的代码,也许它有问题,或者它与我的Android模拟器的