【问题标题】:Rails: Error running wkhtmltopdf -- (error while loading shared libraries)Rails:运行 wkhtmltopdf 时出错——(加载共享库时出错)
【发布时间】:2011-06-29 11:12:53
【问题描述】:

当我的应用程序运行(或从命令行运行)wkhtmltopdf 命令时,我收到以下错误:(从命令行显示)

#> wkhtmltopdf 
wkhtmltopdf: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory

我注意到该库确实在 /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

我还检查了 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)

这是在 EngineYard gentoo 服务器上运行的

【问题讨论】:

标签: ruby-on-rails pdf-generation wkhtmltopdf


【解决方案1】:

Unix 包 x11-libs/libXext 和 x11-libs/libXrender 是依赖项

Gentoo:

sudo emerge libXext libXrender

PDFkit wiki 还更详细地解释了如何让 wkhtmltopdf 在引擎场上工作。 PDFkit wiki

Debian 或 Ubuntu:

sudo apt-get install libxrender1

【讨论】:

  • 知道其他人也有这个问题确实很有帮助......我的工作在 32 位实例上,但在这台 64 位机器上失败,似乎他们有同样的问题。
  • 嗨,Ben,我刚刚编辑了我的答案以包含指向 PDFkit wiki 的链接,这可能会有所帮助
  • 那篇文章有说明,但我注意到它引用了 i386 版本,所以我改为引用 amd64 并且它有效......所以我更新了 wiki 以包含 64 位实例的说明。
  • 这对我有用!但是,在 Debian 上,我还必须运行 sudo apt-get install libext6
  • 适用于 Ubuntu 16.04。谢谢。
【解决方案2】:

使用 Ubuntu 16(来自全新的 Docker 安装):

apt install -y libxrender1 libxext6

【讨论】:

    【解决方案3】:

    我在 Ubuntu 18.04 生产服务器上运行 Rails 5.2 应用程序时遇到了同样的问题,问题是服务器上缺少 libXrender 的依赖项

    我是这样解决的

    运行以下命令搜索缺失的依赖项:

    sudo apt-cache search libXrender
    

    这将显示以下输出:

    libxrender-dev - X Rendering Extension client library (development files)
    libxrender1 - X Rendering Extension client library
    libreoffice - office productivity suite (metapackage)
    

    如果您在生产服务器上运行,只需安装 libxrender1(仅用于渲染 PDF):

    sudo apt-get install libxrender1
    

    此外,如果可能的话,对您服务器上的过时库运行升级:

    sudo apt upgrade
    

    所有这些都完成后,只需重新启动您的应用程序服务器(如果您的应用程序服务器是 puma 并且您为服务器设置了 systemd):

    sudo systemctl restart puma
    

    【讨论】:

      【解决方案4】:

      在 Amazon Linux 2018:03 上对我有用(用于未来的谷歌搜索)

      yum localinstall -y https://repo.almalinux.org/almalinux/8/AppStream/x86_64/os/Packages/libpng15-1.5.30-7.el8.x86_64.rpm
      yum localinstall -y https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.amazonlinux2.x86_64.rpm
      

      【讨论】:

        【解决方案5】:

        在重建我的一个容器之后,在一切正常之前,我遇到了这个问题。我在网上找到的所有答案都对我不起作用,所以我是这样排除故障和解决的:

        1.检查所有依赖项是否存在:

        ldd path/to/your/binary/file/wkhtmltopdf-amd64

        这就是我从中得到的

        linux-vdso.so.1 =>  (0x00007ffded169000)
        libXrender.so.1 => not found
        libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f117bab0000)
        libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f117b806000)
        libXext.so.6 => not found
        libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f117b4cc000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f117b2b2000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f117b0ae000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f117aea6000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f117ac89000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f117a907000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f117a5fe000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f117a3e8000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f117a01e000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f117bcf3000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f1179df5000)
        libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f1179bd0000)
        libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f11799ae000)
        libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f11797aa000)
        libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f11795a4000)
        

        我得到“未找到”的地方意味着缺少依赖项

        2。 apt更新和安装

        更新您的 apt,因为它可能找不到安装所需的库

        apt-get update

        现在我安装了上面结果中“未找到”的缺失依赖项。请注意,对于libxrenderlibxext,我必须安装libxrender-devlibxext-dev

        apt-get install -y libxrender-dev libxext-dev

        【讨论】:

          【解决方案6】:

          sudo apt-get install xvfb

          安装依赖包。

          更新节点模块 wkhtmltopdf index.js

          wkhtmltopdf.command = 'wkhtmltopdf';到'wkhtmltopdf.command = 'xvfb-run wkhtmltopdf';'

          【讨论】:

            【解决方案7】:

            如果你的系统是 64 位的,而你的软件需要 32 位的库,你需要添加标志“i386”,

            例如在 ubuntu 上:

            sudo apt-get install libxrender1:i386
            

            【讨论】:

              【解决方案8】:

              请注意,有一个以 UPX 压缩格式分发的 wkhtmltopdf 的可执行版本,ldd 和 file 都会报告此文件是静态链接的,即使负载需要共享库。

              检查试试

              字符串 | fgrep UPX

              如果您看到任何“UPX”id 字符串,则安装 upx 并在文件副本上使用“upx -d”(因为 upx 可以正常工作),然后在未压缩的文件上运行 ldd。

              【讨论】:

                【解决方案9】:

                今天在运行 wkhtmltopdf 的static version 的 RHEL7 机器上遇到了这个问题。解决方案是安装一些依赖项:

                yum install libXrender libXext fontconfig 
                

                【讨论】:

                • 在我这样做之后,它显示黑框而不是文本。我必须安装这两个包才能使文本正常工作:xorg-x11-font-utilsxorg-x11-fonts-Type1
                • 与 AWS ElasticBeanStalk 配合良好
                【解决方案10】:

                我还需要这样做:

                sudo apt-get install libfontconfig1
                

                【讨论】:

                • 这很有帮助!除了 libxrender1,还需要 libfontconfig1。因此,这回答了这个问题。
                • 这确实很有帮助
                • 谢谢你,我会一直在寻找
                • 谢谢,没有您的回答,接受的答案是不完整的。
                【解决方案11】:

                我在 Debian Squeeze 上遇到了同样的问题,amd64。安装 libxrender1 为我解决了这个问题。

                sudo apt-get install libxrender1
                

                【讨论】:

                  【解决方案12】:

                  我遇到了完全相同的问题!对我来说,解决方案是安装 64 位版本的 wkhtmltoimage。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2011-05-29
                    • 2017-11-05
                    • 2014-12-09
                    • 2022-01-04
                    相关资源
                    最近更新 更多