c - 如何链接一个在C中从未被引用的函数

标签 c linker

链接器的默认行为是排除所有从未引用的函数。不过我想包含这样一个函数用于调试目的:当程序运行异常时,我可以手动将PC设置为该函数的地址并给出一些信息输出。

有办法吗?

最佳答案

The linker's default behavior is to exclude all functions which is never referenced.

对于我熟悉的所有链接器来说,该声明都是错误的:如果您显式列出在链接行上定义 foo() 的目标文件,则 foo() 总是包含在链接的可执行文件或共享库中(当然,除非您指定 --function-sections -Wl,--gc-sections 在链接行上)。

确实,如果 foo() 是在目标文件中定义的,并且该目标文件位于归档库中,并且该目标文件不满足任何引用它定义的来自链接中已使用的其他文件的任何符号,那么该目标文件将不会被拉入链接。

解决方案是:

  • 在链接行上明确列出foo.o,或者
  • 使用 -Wl,--whole-archive -lfoo -Wl,--no-whole-archive(或链接器的等效标志,如果有的话),或者
  • 添加 -u foo 以强制将 foo.o 拉入链接。

关于c - 如何链接一个在C中从未被引用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292031/

相关文章:

c - 获取数组中的最小值

c - `` 继续 `` 中断标签放置

java - 由于链接器错误,IntelliJ 中的 VTK/Java 包装器将无法工作(找不到依赖库)

Windows SDK 中 DirectX 的 C++ 链接器问题

c++ - g++,需要链接器警告/错误以进行多模板特化

c++ - GraphicsMagick.NET 缺少 CORE_RL_bzlib_.lib 文件,C++ 链接器错误?

c - 打印 BST 中的 n 个最大值

c - 为什么 gcc -O3 处理 avx256 compare intrinsic 的方式与 gcc -O0 和 clang 不同?

c - 在 Xcode 7 中找不到头文件

内存映射的 gcc 链接文件,那是什么语法?