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

Alpine Linux下Libjpeg-9d加--disable-shared仍生成.so文件问题咨询

问题根因

libjpeg-9d的configure脚本存在兼容性bug,在musl libc环境下无法正确识别--disable-shared参数,即使显式关闭动态库生成,编译脚本仍会默认生成.so动态库文件。

可行解决方案

方案1:手动修改编译生成的Makefile(适配原有编译流程)

操作步骤如下:

  • 首先正常执行configure配置:
./configure --disable-shared
  • 打开当前目录下生成的Makefile文件,修改两个配置项:
    • 找到SHAREDLIBS = libjpeg.so.9.5.0 libjpeg.so.9 libjpeg.so的行,将值改为空:SHAREDLIBS =
    • 找到INSTALL_SHARED = ${SHELL} ./libtool --mode=install $(INSTALL_PROGRAM)的行,将值改为空:INSTALL_SHARED =
  • 后续正常执行编译安装即可:
make && make install

完成后/usr/local/lib目录下只会生成libjpeg.a静态库文件。

方案2:跳过make install手动部署(最稳妥)

不需要修改任何编译配置,编译完成后手动拷贝所需文件即可:

  • 执行配置和编译步骤:
./configure --disable-shared && make -j$(nproc)
  • 手动拷贝静态库到系统库目录:
cp .libs/libjpeg.a /usr/local/lib/
  • 拷贝对应头文件到系统头目录:
cp jpeglib.h jerror.h jconfig.h jmorecfg.h /usr/local/include/

该方案完全避开了编译脚本的install逻辑,不会产生多余的动态库文件。

方案3:编译时强制指定静态编译参数

执行configure时额外传入静态编译标记,覆盖脚本的错误逻辑:

./configure --enable-static --disable-shared LDFLAGS="-static"
make && make install

该方案在大部分musl环境下可以直接触发正确的静态库唯一生成逻辑,不需要修改配置文件。

验证方法

安装完成后执行以下命令确认仅生成静态库:

ls /usr/local/lib/libjpeg*

输出仅包含/usr/local/lib/libjpeg.a即为符合预期。

内容的提问来源于stack exchange,提问作者Петр Петров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:45:00