Ruby-on-rails Rails:运行 wkhtmltopdf 时出错——(加载共享库时出错)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5035601/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Rails: Error running wkhtmltopdf -- (error while loading shared libraries)
提问by Ben
When my app runs (or when I run from commandline) the wkhtmltopdf command I get the following error: (showing it from command line)
当我的应用程序运行时(或当我从命令行运行时) wkhtmltopdf 命令我收到以下错误:(从命令行显示它)
#> wkhtmltopdf
wkhtmltopdf: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory
I noticed the lib is indeed in the /usr/libfolder but not the /libfolder. Does it matter which one of these it is in? Is there any way to get it to recognize it?
我注意到 lib 确实在/usr/lib文件夹中,但不在/lib文件夹中。它在其中的哪一个重要吗?有没有办法让它识别它?
#> ls -l /usr/lib/libXrender.so*
lrwxrwxrwx 1 root root 19 Feb 17 07:20 /usr/lib/libXrender.so -> libXrender.so.1.3.0
lrwxrwxrwx 1 root root 19 Feb 17 07:20 /usr/lib/libXrender.so.1 -> libXrender.so.1.3.0
-rwxr-xr-x 1 root root 39184 Jan 29 2010 /usr/lib/libXrender.so.1.3.0
#> ls -l /lib/libXrender.so*
ls: cannot access /lib/libXrender.so*: No such file or directory
I also checked dependencies of the lib
我还检查了 lib 的依赖项
# ldd /usr/lib/libXrender.so.1
libX11.so.6 => /usr/lib/libX11.so.6 (0x00002b9cb5afd000)
libc.so.6 => /lib/libc.so.6 (0x00002b9cb5e04000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00002b9cb6143000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00002b9cb6347000)
libdl.so.2 => /lib/libdl.so.2 (0x00002b9cb654d000)
/lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
This is running on an EngineYard gentoo server
这是在 EngineYard gentoo 服务器上运行的
回答by David Barlow
The Unix packages x11-libs/libXext and x11-libs/libXrender are dependencies
Unix 包 x11-libs/libXext 和 x11-libs/libXrender 是依赖项
Gentoo:
Gentoo:
sudo emerge libXext libXrender
PDFkit wiki also explains in more detail how to get wkhtmltopdf working on engine yard. PDFkit wiki
PDFkit wiki 还更详细地解释了如何让 wkhtmltopdf 在引擎场上工作。 PDFkit 维基
Debian or Ubuntu:
Debian 或 Ubuntu:
sudo apt-get install libxrender1
Hope this helps
希望这可以帮助
回答by contact920
I had the same, issue on Debian Squeeze, amd64. Installing libxrender1 solved the issue for me.
我在 Debian Squeeze、amd64 上遇到了同样的问题。安装 libxrender1 为我解决了这个问题。
sudo apt-get install libxrender1
回答by Grigory Kislin
I need also do after:
我还需要在:
sudo apt-get install libfontconfig1
回答by a coder
Ran into this today on a RHEL7 machine running the static versionof wkhtmltopdf. Solution was to install a few dependencies:
今天在运行 wkhtmltopdf静态版本的 RHEL7机器上遇到了这个问题。解决方案是安装一些依赖项:
yum install libXrender libXext fontconfig
回答by u5272981
If your system is 64 bits, and your software requires 32 bits libs, you need to add the flag "i386",
如果您的系统是 64 位,并且您的软件需要 32 位库,则需要添加标志“i386”,
for example on ubuntu:
例如在 ubuntu 上:
sudo apt-get install libxrender1:i386
回答by Thomas Decaux
With Ubuntu 16 (from a fresh Docker install):
使用 Ubuntu 16(来自全新的 Docker 安装):
apt install -y libxrender1 libxext6
apt install -y libxrender1 libxext6
回答by André
I was having the exact same problem! The solution, to me, was to install the 64bit version of wkhtmltoimage.
我遇到了完全相同的问题!对我来说,解决方案是安装 wkhtmltoimage 的 64 位版本。
回答by kishore
sudo apt-get install xvfb
sudo apt-get install xvfb
to install the dependency package.
安装依赖包。
Update the node-modules wkhtmltopdf index.js
更新节点模块 wkhtmltopdf index.js
wkhtmltopdf.command = 'wkhtmltopdf'; to 'wkhtmltopdf.command = 'xvfb-run wkhtmltopdf';'
wkhtmltopdf.command = 'wkhtmltopdf'; 'wkhtmltopdf.command = 'xvfb-run wkhtmltopdf';'
回答by Promise Preston
I had this same issue on running a Rails 5.2 application on an Ubuntu 18.04 production server, the issue was that there were missing dependencies for libXrenderon the server
我在 Ubuntu 18.04 生产服务器上运行 Rails 5.2 应用程序时遇到了同样的问题,问题是libXrender服务器上缺少依赖项
Here's how I solved it:
这是我解决它的方法:
Run the command below to search for the missing dependencies:
运行以下命令以搜索缺少的依赖项:
sudo apt-cache search libXrender
This will display the output below:
这将显示以下输出:
libxrender-dev - X Rendering Extension client library (development files)
libxrender1 - X Rendering Extension client library
libreoffice - office productivity suite (metapackage)
If you're running on a production server, simply install libxrender1only (for rendering PDFs):
如果您在生产服务器上运行,只需安装libxrender1(用于渲染 PDF):
sudo apt-get install libxrender1
Also, if possible run upgrades for outdated libraries on your server:
此外,如果可能,请在您的服务器上为过时的库运行升级:
sudo apt upgrade
Once, all these have been completed, simply restart your application server (If your application server is pumaand if your setup systemd for the server):
一旦所有这些都完成了,只需重新启动您的应用程序服务器(如果您的应用程序服务器是puma并且您为服务器设置了 systemd):
sudo systemctl restart puma
That's all.
就这样。
I hope this helps
我希望这有帮助
回答by Micheál Lunny
Note that there is an executable version of wkhtmltopdf distributed in a UPX compressed format, ldd and file will both report that this file is statically linked even though the payload requires shared libraries.
请注意,有一个 wkhtmltopdf 的可执行版本以 UPX 压缩格式分发,ldd 和 file 都会报告此文件是静态链接的,即使有效负载需要共享库。
To check try
检查试试
strings | fgrep UPX
字符串 | fgrep UPX
If you see any "UPX" id strings then install upx and use "upx -d" on a copy of the file (as upx works in place) and then run ldd on the uncompressed file.
如果您看到任何“UPX”id 字符串,则安装 upx 并在文件副本上使用“upx -d”(因为 upx 可以正常工作),然后在未压缩的文件上运行 ldd。

