我们希望生成仅具有已记录的API函数的公共符号的Windows静态库。我们想要删除所有其他符号。
对于* 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函数调用实用程序和数学函数,因此不能将这些函数声明为static。当我们编译每个.c文件时,公共符号在目标文件中,然后当我们链接目标文件以创建库时,链接器将使所有公共符号可见。链接器生成静态库后,我们只希望符号api_func_0
和api_func_1
可见。