You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Makefile.am中仅当动态库存在时才进行链接?

解决方案

你的写法无效是因为Makefile.am不支持直接嵌入shell条件语句,需要借助Autotools的配置检测机制实现条件链接,具体步骤如下:

1. 修改configure.ac添加检测逻辑

在configure.ac中加入对目标库的检测代码,提供两种可选方式:

方式一:仅检测文件物理存在

如果只需确认库文件存在,添加以下代码:

AC_CHECK_FILE([/usr/lib64/liba-3.2.so.1],
              [HAVE_LIBA=yes],
              [HAVE_LIBA=no])
AC_SUBST(HAVE_LIBA)

方式二:检测库的可用性(更可靠)

如果需要确保库能正常链接(避免文件存在但依赖缺失的情况),可通过AC_CHECK_LIB检测库中的某个导出函数(示例假设库中有a_init函数):

AC_CHECK_LIB([a], [a_init],
             [HAVE_LIBA=yes
              myprog_LDADD="/usr/lib64/liba-3.2.so.1"],
             [HAVE_LIBA=no])
AC_SUBST(myprog_LDADD)

2. 修改Makefile.am使用条件变量

根据configure.ac的检测结果,在Makefile.am中添加对应逻辑:

若使用方式一,添加:

if HAVE_LIBA
myprog_LDADD += /usr/lib64/liba-3.2.so.1
endif

若使用方式二,直接引用已在configure阶段赋值的变量即可:

myprog_LDADD = @myprog_LDADD@

3. 重新生成配置文件

修改完成后,在项目根目录执行以下命令更新配置并编译:

autoreconf -vfi
./configure
make

内容的提问来源于stack exchange,提问作者qwerty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:55:19