【问题标题】:libicui18n.so.52: cannot open shared object filelibicui18n.so.52:无法打开共享对象文件
【发布时间】:2014-04-21 00:40:27
【问题描述】:

我一直在使用 libicu 来检测在 docker、ubuntu 内部运行的节点应用程序中的字符集。这是通过使用libicu-dev 包的模块node-icu-charset-detector 完成的,我在npm 包之前安装了它。

一切正常,但我突然收到错误

module.js:356
  Module._extensions[extension](this, filename);                               ^
Error: libicui18n.so.52: cannot open shared object file: No such file or directory
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/app/node_modules/node-icu-charset-detector/node-icu-charset-detector.js:1:82)

查看我的 /usr/lib/,我没有找到任何与 icu 相关的内容,但已安装 libicu-dev。

这是我的 docker 文件;

# Pull base image.
FROM dockerfile/ubuntu

WORKDIR /
ADD run.sh /run.sh

#make dirs
RUN mkdir /log
RUN mkdir /app

RUN apt-get install -y supervisor libssl-dev pkg-config wget


# Install Node.js
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:chris-lea/node.js
RUN apt-get update
RUN apt-get install -y nodejs




# Append to $PATH variable.
RUN echo '\n# Node.js\nexport PATH="node_modules/.bin:$PATH"' >> /root/.bash_profile

ADD /supervisord.conf /etc/supervisor/conf.d/supervisord.conf

#get phantomJS
RUN apt-get install libfreetype6 libfontconfig -y
RUN cd /app
RUN npm install phantomjs &>/dev/null

#ICU
RUN apt-get install libicu-dev libicu48 -y


RUN npm install --loglevel silent &>/dev/null
RUN npm update --loglevel silent &>/dev/null


#GET NODE-Supervisor
RUN cd /
RUN npm install --loglevel silent -g supervisor


RUN chmod 755 /*.sh

CMD ["/run.sh"]

感谢您在此问题上提供的任何帮助,因为我的 linux 知识已接近尾声:(

【问题讨论】:

    标签: node.js ubuntu shared-libraries docker icu


    【解决方案1】:

    您正在安装 libicu 4.8,但请求的共享库是 libicu 52。因此您需要安装 libicu52 包(如果可用)或从 @ 下载预构建的二进制文件(或源代码并编译) 987654321@.

    【讨论】:

    • 你的回答似乎很简单,我首先以为你在骗我。但你是对的;不知何故 libuci 在引擎盖下更新并想要 libicu52,它仅在 ubuntu 14.04 中可用。感谢您的回答,我会在答案中写出完整的过程
    • @stueja 我不确定你指的是什么。我既不是提出原始问题的人,也不是窃取任何人的答案。
    【解决方案2】:

    正如@mscdex 所指出的,libicu 正在寻找 libicu52 包。不知何故,存储库得到了更新,允许我提取新的 libicu,它依赖于 libicu52,它在 12.04 的存储库中不可用,但在 14.04 中。由于 docker 注册表中没有 14.04 的官方可信版本,因此我制作了自己的“基础”ubuntu14.04 docker 映像,该映像从 13.10 开始并升级到 14.04;

    FROM ubuntu:saucy
    
    ENV DEBIAN_FRONTEND noninteractive
    # Work around initramfs-tools running on kernel 'upgrade': <http://bugs.debian.org/cgi-    bin/bugreport.cgi?bug=594189>
    ENV INITRD No
    
    # Update OS.
    RUN sed -i 's/saucy/trusty/g' /etc/apt/sources.list
    RUN apt-get update -y
    RUN apt-get upgrade -y
    RUN apt-get dist-upgrade -y
    
    # Install basic packages.
    RUN apt-get install -y software-properties-common
    RUN apt-get install -y curl git htop unzip vim wget
    
    # Add files.
    ADD root/.bashrc /root/.bashrc
    ADD root/.gitconfig /root/.gitconfig
    ADD root/scripts /root/scripts
    
    
    RUN apt-get clean
    
    # Set working directory.
    ENV HOME /root
    WORKDIR /root
    
    CMD ["/bin/bash"]
    

    然后在我的工人的 Dockerfile 中,我安装了 libicu52 而不是 libicu48,从而解决了所有问题

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 2013-04-21
      • 2013-05-05
      • 2019-08-01
      • 2017-05-21
      • 2012-05-24
      • 2014-02-10
      • 2021-01-06
      • 2018-07-03
      相关资源
      最近更新 更多