如何使用 Automake 链接到共享库

Posted

技术标签:

【中文标题】如何使用 Automake 链接到共享库【英文标题】:How to link to a shared library using Automake 【发布时间】:2020-05-22 11:27:34 【问题描述】:

在 IDE 中度过了我的大部分开发生涯,我目前正在尝试扩展一个使用 Autoconf 和 A​​utomake 的开源项目 C-ICAP,因此对于那些更熟悉该工具集的人来说,这可能是一个显而易见的答案。我正在尝试向使用我们专有共享库的 ICAP 服务添加一项新服务,但无法对 Makefile.am 进行必要的更新以将我们的库添加到新服务的链接操作中。

我需要创建

的等价物
-lmylibrary

我已经尝试了以下,

LDADD = mylibrary
LDADD = libmylibrary.so
LIBADD = mylibrary
LIBADD = libmylibrary.so

但是当我“制作”项目时,构建日志中没有提到“mylibrary”。 当我尝试时

LIBS = mylibrary

“mylibrary”出现在构建日志中,但在构建的 .so 文件上运行 ldd 不包含“mylibrary”。

项目正在安装到 Ubuntu 主机上。 我们的“libmylibrary.so”安装到/usr/lib

更新 Makefile.am 后,我正在运行以下命令序列

aclocal
autoconf
automake --add-missing
./configure --with-c-icap=/usr/local/c-icap --prefix=/usr/local/c-icap
make

为了使新服务能够链接到已安装的共享库,我缺少什么?

【问题讨论】:

【参考方案1】:

由于您尝试将其添加到 共享对象 构建中,因此您要查找的是 libfoo_la_LIBADD = -lmylibrary。不支持将LIBADD 作为Makefile.am 中的全局变量。

请注意,默认情况下,链接编辑器现在会丢弃任何添加到链接行的库,如果它们不用于满足源对象中未定义的符号。如果你想强制链接到你的库,你必须使用libfoo_la_LIBADD = -Wl,--no-as-needed -lmylibrary -Wl,--as-needed,但这可能会使构建变得相当复杂。

【讨论】:

以上是关于如何使用 Automake 链接到共享库的主要内容,如果未能解决你的问题,请参考以下文章

Automake:如何在不安装的情况下构建共享库

如何使用 JNI/JNA 可以使用的 automake 创建共享库(dylib)?

如何使用 automake 安装 D 库的 .d 文件?

如何通过 autoconf/automake 排除 boost 库/头文件包含问题?

如何将共享库链接到Linux中的其他共享库?

如何使用 G++/LD 将库链接到共享对象