gcc - 如何使用 Automake 链接到共享库
问题描述
在 IDE 中度过了我的大部分开发生涯后,我目前正在尝试扩展一个使用 Autoconf 和 Automake 的开源项目 C-ICAP,因此对于那些更熟悉该工具集的人来说,这可能是一个显而易见的答案。我正在尝试向使用我们专有共享库的 ICAP 服务添加一项新服务,但无法对 Makefile.am 进行必要的更新以将我们的库添加到新服务的链接操作中。
我需要创建相当于
-lmylibrary
我试过以下,
LDADD = mylibrary
LDADD = libmylibrary.so
LIBADD = mylibrary
LIBADD = libmylibrary.so
但是当我“制作”项目时,构建日志中没有提到“mylibrary”。当我尝试
LIBS = mylibrary
“mylibrary”出现在构建日志中,但ldd
在构建的 .so 文件上运行不包括“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
为了使新服务链接到已安装的共享库,我缺少什么?
解决方案
由于您尝试将此添加到共享对象构建中,因此您正在寻找的是libfoo_la_LIBADD = -lmylibrary
. 不支持LIBADD
全局输入。Makefile.am
请注意,默认情况下,链接编辑器现在会丢弃任何添加到链接行的库,如果它们不用于满足源对象中未定义的符号。如果您想强制链接到您的库,则必须使用libfoo_la_LIBADD = -Wl,--no-as-needed -lmylibrary -Wl,--as-needed
,但这可能会使构建变得相当复杂。
推荐阅读
- javascript - 使用javascript添加行的问题
- firebase - React Native Google Signin idToken null
- javascript - 把和数组变成一个对象
- c++ - 布尔函数返回意外值
- c++ - 显式默认的移动构造函数使结构不可轻易复制
- django - 无法在视图中显示两个表单 - Django
- css - 如何更改 YouTube iframe 的 CSS 样式
- javascript - 在 VueJs 中应用交叉点观察器时的错误
- reactjs - 无法重定向到找不到页面(React Hooks)
- excel - PowerBI:如何使用 DAX/Measure 计算/将时间转换为百分比