【问题标题】:How do I get a list of symbols from an automake/libtool library?如何从 automake/libtool 库中获取符号列表?
【发布时间】:2019-10-29 23:56:52
【问题描述】:

我是twolame 的维护者,这是一个 MPEG 音频第 2 层编码库。它是使用 autoconf/automake/libtool 构建的。

作为构建/测试过程的一部分,我想获取可见/导出符号的列表并将其与版本控制文件进行比较,以确保只有预期的符号可见。

在 Mac OS 上,我可以使用 nm -g libtwolame/.libs/libtwolame.dylib 成功获取符号列表。然后我打算编写一个脚本来从nm 输出中提取符号,并将其与作为make check 目标一部分的文件进行比较。

但我不确定如何在脚本中计算二进制库的路径。有没有办法问libtool,取libtwolame/libtwolame.la 并返回libtwolame/.libs/libtwolame.dylib(或Linux 上的libtwolame/.libs/libtwolame.so)? 或者任何可以用 automake 宏来完成的事情?

【问题讨论】:

标签: automake libtool


【解决方案1】:

如果您已经有一个包含导出符号列表的版本控制文件(例如,libtwolame.sym),您可以告诉 libtool 仅导出该文件中列出的符号。

只需要在Makefile.am 中添加三行:

EXTRA_DIST += libtwolame.sym
libtwolame_la_DEPENDENCIES += ${srcdir}/libtwolame.sym
libtwolame_la_LDFLAGS += -export-symbols ${srcdir}/libtwolame.sym

我们长期以来一直使用该系统为libgphoto2 控制导出给我们库用户的符号列表以及动态加载的相机驱动程序导出的符号。

警告:引用libtool manual(强调我的):

-export-symbols 符号文件

告诉链接器只导出 symfile 中列出的符号。符号文件应以 .sym 结尾,并且每行必须包含一个符号的名称。 此选项在某些平台上无效。默认情况下所有符号都被导出。

【讨论】:

  • 谢谢,知道这真的很有用。赞成但不选择正确答案,因为作为 LegendofPedro 链接到的其他问题,我认为实际上不可能做到我最初提出的要求。
猜你喜欢
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 2011-09-24
  • 2015-03-24
相关资源
最近更新 更多