nasm 有什么方法可以自动添加使用过的外部符号吗?

Any way for nasm to automatically add used external symbols?

有什么方法可以让 NASM 为它找到的任何未声明的符号自动生成外部声明?

我现在拥有的:

这当然会产生足够大的重定位 table 结果。

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

或者我应该坚持我以前的做法,并在需要时手动声明每个新的 extern 吗?

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

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

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

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

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

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