静态库“界面”

时间:2011-07-12 19:20:05

标签: gcc mingw static-libraries

在构建目标文件(lib*.o)时,有没有办法告诉编译器(gcc / mingw32)只显示.c文件中的某些函数?
我想这样做的原因是我静态链接到一个超过10万行的库(SQLite),但我只使用了它提供的少数功能。我希望如果我能告诉编译器只公开那些函数,它会优化我选择的少数函数所需的所有函数代码,从而不断减小库的大小。

2 个答案:

答案 0 :(得分:1)

我找到了几种可能的解决方案:

这就是我所问的。它是Windows“dllexpoort

的gcc等价物

我还发现了链接时代码生成。这允许链接器查看代码的实际使用部分,并删除其余部分。与strip-fwhole-program一起使用可以让我获得更好的结果。

注意:这个标志只有在一次调用gcc时没有编译整个程序才有意义,这就是我正在做的事情(创建一个sqlite.o文件,然后静态链接它) )。

这里提到了我发现但尚未研究的第三个选项:

答案 1 :(得分:0)

这可能是联系人的工作,而不是编译器。当链接它作为程序(.exe)时,链接器将只负责导入相关的符号,并且在链接DLL时,__ dllexport机制可能正是您正在寻找的,或者ld的某些标志可以帮助您(man LD)。