Termux aarch64编译bind-9遇-lisc库找不到问题求助
解决Termux aarch64编译bind-9时的-lisc链接错误
问题背景
在Ubuntu 22.04环境下为Termux aarch64架构编译bind-9应用,基于termux-packages仓库完成Ubuntu依赖、Android SDK及Docker-run的安装,使用build-package.sh脚本编译时出现以下链接错误:
ld: error: unable to find library -lisc clang-14: error: linker command failed with exit code 1 (use -v to see invocation) libtool: error: error: relink 'libdns.la' with the above command before installing it
尽管libisc库已成功安装到指定路径:
libtool: install: /usr/bin/install -c .libs/libisc-9.19.5.so /data/data/com.termux/files/usr/lib/libisc-9.19.5.so libtool: install: /usr/bin/install -c .libs/libisc.lai /data/data/com.termux/files/usr/lib/libisc.la
但编译过程中动态生成的Makefile无法手动修改(编译结束后即被删除),需要通过非手动修改Makefile的方式解决问题。
可行解决方案
方案1:传递额外链接参数到编译流程
直接给build-package.sh添加链接参数,强制指定libisc的路径:
./build-package.sh -o "LIBS=-L/data/data/com.termux/files/usr/lib -lisc" bind9
或者修改termux-packages/packages/bind9/build.sh脚本,在configure阶段追加参数:
./configure \ --prefix=${TERMUX_PREFIX} \ --host=${TERMUX_HOST_PLATFORM} \ # 保留原有其他参数 LIBS="-L${TERMUX_PREFIX}/lib -lisc"
方案2:修复libisc.la的路径配置
进入编译调试模式暂停编译:
./build-package.sh -d bind9
检查/data/data/com.termux/files/usr/lib/libisc.la文件内容,确保以下字段配置正确:
libdir='/data/data/com.termux/files/usr/lib' dlname='libisc-9.19.5.so' library_names='libisc-9.19.5.so libisc.so'
修改后重新执行报错中的relink命令即可。
方案3:添加编译配置补丁
在termux-packages/packages/bind9目录下创建补丁文件fix-libisc-link.patch,调整bind的编译配置:
diff --git a/configure.ac b/configure.ac index abc123..def456 100644 --- a/configure.ac +++ b/configure.ac @@ -1234,6 +1234,8 @@ AC_CHECK_LIB([uv], [uv_loop_new], [], [AC_MSG_ERROR([libuv is required])]) # 强制添加libisc链接参数 LIBS="-L\${libdir} -lisc $LIBS" AC_SUBST(LIBS)
然后在build.sh中配置应用此补丁,重新执行编译。
方案4:强制静态链接libisc
在编译时添加静态链接参数,避免动态链接的路径问题:
./build-package.sh -o "--enable-static" bind9
内容的提问来源于stack exchange,提问作者Ryufuz
相关产品推荐
相关产品推荐

