如何从 automake/libtool 库中获取符号列表?

Posted

技术标签:

【中文标题】如何从 automake/libtool 库中获取符号列表?【英文标题】:How do I get a list of symbols from an automake/libtool library? 【发布时间】: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 宏来完成的事情?

【问题讨论】:

这能回答你的问题吗? Get libtool library output filename 【参考方案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 链接到的其他问题,我认为实际上不可能做到我最初提出的要求。

以上是关于如何从 automake/libtool 库中获取符号列表?的主要内容,如果未能解决你的问题,请参考以下文章

autoconf/automake/libtool - 如何取消定义 PACKAGE_NAME、PACKAGE_TARNAME、PACKAGE_VERSION 等

Automake + libtool:每个对象 CFLAGS 的模式规则?

Automake/libtool 不构建共享库

autoconf,automake,libtool

手动安装m4, autoconf, automake, libtool

运行“requirements_smf_libs_install automake libtool”的 RVM 错误,