我们希望生成 Windows 静态库,这些库仅具有用于记录的 API 函数的公共符号。我们想去掉所有其他符号。
这对于 *NIX 库来说很容易;您可以使用strip(1)
实用程序并指定--keep-symbol=foo
,甚至可以将整个符号列表放入文件中并指定文件。
我们如何为 Windows 库做到这一点?
更详细一点:假设我们正在创建一个库,它是由多个 .C 文件构建的。
util.c
定义函数util_foo()
和util_bar()
。 math.c
定义some_math_func()
. 然后lib.c
定义函数api_func_0()
和api_func_1()
。API 函数调用实用程序和数学函数,因此这些函数不得声明为静态的。当我们编译每个 .c 文件时,公共符号都在目标文件中,然后当我们链接目标文件以创建库时,链接器将使所有公共符号可见。一旦链接器生成了静态库,我们只需要符号api_func_0
和api_func_1
可见的。