【问题标题】:Any way for nasm to automatically add used external symbols?nasm 有什么方法可以自动添加使用的外部符号?
【发布时间】:2016-02-25 16:43:34
【问题描述】:

NASM 有没有办法为它找到的任何未声明的符号自动生成外部声明?

我现在拥有的:

  • 我的应用程序的源文件
  • 包含所有 GL_ 定义和约 500 个声明为 extern gl*(由 gl.h 制成)的 OpenGL 函数的大型包含

这当然会生成一个足够大的重定位表。

但是我只使用了所有已声明的 OpenGL 函数的一小部分,并且我只想包括我使用过的那些,可能根本不需要我自己声明外部函数?

或者我应该坚持以前的方式并在需要时手动声明每个新的外部?

我确实阅读了 NASMdocs 并进行了搜索,但我发现的只是如何声明 externs 以及如何在 .o 文件之间使用它们,这不是问题。

【问题讨论】:

    标签: linux nasm elf


    【解决方案1】:

    经过更多研究后,我设法找到了解决方案:剥离。

    首先,我像往常一样构建我的对象和可执行文件,其中包括大型重定位表。但在每一步我都会添加strip --strip-unneeded - 用于中间对象和最终可执行文件。

    它的作用是只留下对象中实际使用的符号,同时删除所有其他符号。它确实为编译过程增加了一些开销,但几乎不会引起注意。

    我还发现剥离.o 文件以及可执行文件会产生最小的文件。我想在链接时添加了新符号,其中一些未使用,因此可以剥离。

    将它添加到 Makefile 中很容易做到。

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2021-11-05
      • 2017-04-21
      • 1970-01-01
      相关资源
      最近更新 更多