gpt4 book ai didi

gcc - 静态库 "interface"

转载 作者:行者123 更新时间:2023-12-04 19:22:20 25 4
gpt4 key购买 nike

在构建目标文件( lib*.o )时,有什么方法可以告诉编译器(gcc/mingw32)只公开 .c 文件中的某些函数?
我想这样做的原因是我静态链接到 100,000+ 行库 (SQLite),但我只使用它提供的少数几个功能。我希望如果我可以告诉编译器只公开这些函数,它将优化我选择的那些函数永远不需要的所有代码,从而大大减少库的大小。

最佳答案

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

这是我问的。它是 Windows 的 gcc 等效项 dllexpoort :

  • http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Code-Gen-Options.html ( -fvisibility )
  • http://gcc.gnu.org/wiki/Visibility

  • 我还发现了链接时代码生成。这允许链接器查看代码的哪些部分被实际使用并去掉其余部分。与 strip 一起使用和 -fwhole-program给了我更好的结果。
  • http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Optimize-Options.html (见 -flto-fwhole-program)

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

    这里提到了我发现但尚未研究的第三个选项:
  • How to remove unused C/C++ symbols with GCC and ld?
  • 关于gcc - 静态库 "interface",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669814/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com