nasm 有什么方法可以自动添加使用过的外部符号吗?
Any way for nasm to automatically add used external symbols?
有什么方法可以让 NASM 为它找到的任何未声明的符号自动生成外部声明?
我现在拥有的:
- 我的应用程序的源文件
- 一个包含所有 GL_ 定义的大型包含和声明为 extern gl* 的 ~500 个 OpenGL 函数(来自 gl.h)
这当然会产生足够大的重定位 table 结果。
但是我只使用了所有声明的 OpenGL 函数中的一小部分,我想只包括我使用过的函数,可能根本不需要我自己声明外部函数?
或者我应该坚持我以前的做法,并在需要时手动声明每个新的 extern 吗?
我确实阅读了 NASM 文档并进行了搜索,但我发现的只是如何声明外部表达式以及如何在 .o 文件之间使用它们,这不是问题所在。
经过更多研究,我设法找到了解决方法:剥离。
首先,我像往常一样构建我的对象和可执行文件,其中包括大型重定位表。但是在每一步我都添加 strip --strip-unneeded
- 中间对象和最终可执行文件。
它的作用是仅保留对象中实际使用的符号,同时删除所有其他符号。它确实会在编译过程中增加一些开销,但几乎不会引起注意。
我还发现剥离 .o
文件和可执行文件会生成最小的文件。我想在链接时添加了新符号,其中一些未使用,因此可以删除。
将其添加到 Makefile 中非常容易做到。
有什么方法可以让 NASM 为它找到的任何未声明的符号自动生成外部声明?
我现在拥有的:
- 我的应用程序的源文件
- 一个包含所有 GL_ 定义的大型包含和声明为 extern gl* 的 ~500 个 OpenGL 函数(来自 gl.h)
这当然会产生足够大的重定位 table 结果。
但是我只使用了所有声明的 OpenGL 函数中的一小部分,我想只包括我使用过的函数,可能根本不需要我自己声明外部函数?
或者我应该坚持我以前的做法,并在需要时手动声明每个新的 extern 吗?
我确实阅读了 NASM 文档并进行了搜索,但我发现的只是如何声明外部表达式以及如何在 .o 文件之间使用它们,这不是问题所在。
经过更多研究,我设法找到了解决方法:剥离。
首先,我像往常一样构建我的对象和可执行文件,其中包括大型重定位表。但是在每一步我都添加 strip --strip-unneeded
- 中间对象和最终可执行文件。
它的作用是仅保留对象中实际使用的符号,同时删除所有其他符号。它确实会在编译过程中增加一些开销,但几乎不会引起注意。
我还发现剥离 .o
文件和可执行文件会生成最小的文件。我想在链接时添加了新符号,其中一些未使用,因此可以删除。
将其添加到 Makefile 中非常容易做到。