nasm能否自动添加外部符号?

时间:2016-02-25 16:43:35

标签: linux nasm elf

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

我现在拥有的:

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

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

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

或者我应该坚持以前的做法,并在需要时立即手动声明每个新的外部人员?

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

将其添加到Makefile中非常容易。