NASM有没有办法自动为它找到的任何未声明的符号生成外部声明?
我现在拥有的:
这当然会产生一个足够大的重定位表。
但是我只使用了所有声明的OpenGL函数中的一小部分,我想只包括那些我曾经使用过的函数,可能根本不需要自己声明外部函数?
或者我应该坚持以前的做法,并在需要时立即手动声明每个新的外部人员?
我确实阅读了NASMdocs并进行了搜索,但我发现的是如何声明外部以及如何在.o文件之间使用它们,这不是问题。
答案 0 :(得分:0)
经过一些研究后,我设法找到了解决方案:剥离。
首先,我正常构建我的对象和可执行文件,其中包括大型重定位表。但是在每一步我添加strip --strip-unneeded
- 用于中间对象和最终可执行文件。
它做什么,它只留下实际在对象中使用的符号,同时删除所有其他符号。它确实为编译过程增加了一些开销,但它几乎没有引起注意。
我还发现剥离.o
文件以及可执行文件会产生最小的文件。我想在链接时添加了新符号,其中一些未被使用,因此可以被剥离。
将其添加到Makefile中非常容易。