Ubuntu 22.04安装Phantomjs失败:自动配置错误
Ubuntu 22.04 安装 PhantomJS 时 Auto configuration failed 错误解决办法
在Ubuntu 22.04系统中安装PhantomJS时出现自动配置失败错误,核心问题是找不到libproviders.so,且尝试过2015-2022年的常规解决方案无效。具体报错如下:
Auto configuration failed 139998593603520:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(libproviders.so): libproviders.so: cannot open shared object file: No such file or directory 139998593603520:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244: 139998593603520:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:conf_mod.c:285:module=providers, path=providers 139998593603520:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:conf_mod.c:222:module=providers
问题根源
Ubuntu 22.04默认使用OpenSSL 3.0,而PhantomJS官方预编译版本依赖旧版OpenSSL(1.1.x)。两者的DSO模块结构差异导致PhantomJS无法正确识别OpenSSL 3.0的libproviders.so模块,触发配置错误。
解决步骤
方法一:临时跳过OpenSSL providers模块
- 创建简化的OpenSSL配置文件,跳过providers模块加载:
创建/tmp/openssl_no_prov.cnf文件,写入以下内容:openssl_conf = openssl_init [openssl_init] providers = provider_sect [provider_sect] default = default_sect [default_sect] activate = 1 - 运行PhantomJS时指定该配置文件:
若是npm安装的PhantomJS,可在启动脚本中添加这个环境变量。OPENSSL_CONF=/tmp/openssl_no_prov.cnf phantomjs
方法二:绑定旧版OpenSSL库
Ubuntu 22.04可手动安装OpenSSL 1.1,并让PhantomJS加载该版本库:
- 安装OpenSSL 1.1和
patchelf工具:sudo apt update && sudo apt install libssl1.1 patchelf - 找到PhantomJS可执行文件路径(npm安装路径一般为
node_modules/phantomjs-prebuilt/bin/phantomjs),执行命令修改其库加载路径:
替换sudo patchelf --set-rpath /usr/lib/x86_64-linux-gnu/libssl.so.1.1:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /path/to/phantomjs/path/to/phantomjs为实际的PhantomJS文件路径。
方法三:源码编译适配版本
如果上述方法无效,直接从源码编译PhantomJS,确保适配Ubuntu 22.04环境:
- 安装编译依赖:
sudo apt update && sudo apt install build-essential g++ flex bison gperf ruby perl libsqlite3-dev libfontconfig1-dev libicu-dev libfreetype6 libssl-dev libpng-dev libjpeg-dev - 克隆源码并切换到稳定版本:
git clone https://github.com/ariya/phantomjs.git cd phantomjs git checkout 2.1.1 - 开始编译(耗时较长):
./build.sh --confirm - 编译完成后,将可执行文件复制到系统路径:
sudo cp bin/phantomjs /usr/local/bin/
内容的提问来源于stack exchange,提问作者user26732
相关产品推荐
相关产品推荐

