【问题标题】:How can I use a library's header files to generate a libfoo.sym file for use with libtool -export-symbols?如何使用库的头文件生成 libfoo.sym 文件以与 libtool -export-symbols 一起使用?
【发布时间】:2014-01-23 16:07:15
【问题描述】:

我正在为 Debian GNU/Linux 发行版构建一个共享库,我担心它在不需要的情况下导出的内部函数的符号数量。由于该库是使用 autoconf/automake/libtool 构建的,因此答案很简单:我可以将 -export-symbols libfoo.sym 添加到 libfoo_la_LDFLAGS 并仅指定要在该文件中导出的符号。

但由于这涉及容易出错的手动工作,我认为必须有更好的方法。是否可以自动读取(在这种情况下)库随附的数十个 .h 文件并生成 libfoo.syms 文件的第一个版本。

我可以只使用 C(或 C++)编译器为我完成繁重的工作吗?

【问题讨论】:

  • 如果您为库 ​​API 使用了某种“命名空间”,您可以考虑使用 -export-symbols-regex REGEX 选项。
  • @BrettHale 是的,我曾考虑过,但可以肯定的是,我仍然需要阅读所有这些头文件。 (我不是作者。)
  • 我能想到的唯一另一种自动化流程的方法是使用ctags。它可能已经安装在您的系统上。

标签: c++ c linux shared-libraries libtool


【解决方案1】:

这相当于提取函数原型并在此处介绍: Extracting C / C++ function prototypes

【讨论】:

    【解决方案2】:

    但由于这涉及容易出错的手动工作,我认为必须有更好的方法。是否可以自动读取(在这种情况下)库随附的数十个 .h 文件并生成 libfoo.syms 文件的第一个版本。

    在目标文件上使用nm 可能比尝试解析头文件更有用。可以告诉nm 将输出限制为仅导出。

    我可以只使用 C(或 C++)编译器来为我完成繁忙的工作吗?

    某些编译器有工具可以帮助解决这个问题,例如 gcc 的 visibility 支持。

    但真正的问题是你必须知道哪些函数必须导出,哪些不能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-08
      • 2019-12-20
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多