Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Linux安装库(ICU)问题_C++_Linux_Shared Libraries_Icu - Fatal编程技术网

C++ Linux安装库(ICU)问题

C++ Linux安装库(ICU)问题,c++,linux,shared-libraries,icu,C++,Linux,Shared Libraries,Icu,我是安装库的相对新手。我的系统目前有一个旧版本的库(3.8),我想去最新的(4.4) 按照ICU readme.html中的步骤,一切正常(echo$?为每个步骤生成所有0)。我看到库被安装到了/usr/local/lib。但是,库的当前版本安装在/usr/lib中 我的问题 1) 这两个地点之间是否存在“组织”或其他显著差异 2) 如何将新库的安装路径更改为/usr/lib 3) 库位于错误的位置是否是我运行ICU目录中的示例时,得到“加载共享库时出错:libicui18n.so.44”的原因

我是安装库的相对新手。我的系统目前有一个旧版本的库(3.8),我想去最新的(4.4)

按照ICU readme.html中的步骤,一切正常(echo$?为每个步骤生成所有0)。我看到库被安装到了/usr/local/lib。但是,库的当前版本安装在/usr/lib中

我的问题

1) 这两个地点之间是否存在“组织”或其他显著差异

2) 如何将新库的安装路径更改为/usr/lib

3) 库位于错误的位置是否是我运行ICU目录中的示例时,得到“加载共享库时出错:libicui18n.so.44”的原因

谢谢大家。

/usr中的内容直接属于您的发行版,除非通过其软件包管理器进行修改,否则不应进行修改。
/usr/local
中的内容属于本地安装,由您自行管理。因此,将较新libICU的本地安装放在
/usr/local/lib
中是正确的

2) 在构建ICU时,您可以通过调整一些设置来做到这一点——我不能给您具体的建议,因为我不知道构建ICU使用什么。但是,您不应该这样做,因为这将覆盖发行版的文件,这可能导致任意可怕的破坏

3) 有点。问题不是库安装在错误的位置,而是
/usr/local/lib
不在默认搜索路径中。您可以通过两种方式解决此问题:

  • 使用此shell命令暂时为您自己:

    export LD_LIBRARY_PATH=/usr/local/lib
    
  • 对于所有用户,通过将
    /usr/local/lib
    添加到
    /etc/ld.so.conf
    中的列表,然后以root用户身份运行
    ldconfig
    来永久使用

1)直接在
/usr
中的内容属于您的发行版,除非通过其软件包管理器,否则不应修改。
/usr/local
中的内容属于本地安装,由您自行管理。因此,将较新libICU的本地安装放在
/usr/local/lib
中是正确的

2) 在构建ICU时,您可以通过调整一些设置来做到这一点——我不能给您具体的建议,因为我不知道构建ICU使用什么。但是,您不应该这样做,因为这将覆盖发行版的文件,这可能导致任意可怕的破坏

3) 有点。问题不是库安装在错误的位置,而是
/usr/local/lib
不在默认搜索路径中。您可以通过两种方式解决此问题:

  • 使用此shell命令暂时为您自己:

    export LD_LIBRARY_PATH=/usr/local/lib
    
  • 对于所有用户,通过将
    /usr/local/lib
    添加到
    /etc/ld.so.conf
    中的列表,然后以root用户身份运行
    ldconfig
    来永久使用

  • /usr/local是本地安装软件的目录层次结构/usr/bin、/usr/lib/等用于系统管理的文件(即由您的分发工具(如rpm-yum-dselect等)管理的文件)
  • 一般来说,您不应该将东西安装到/usr/lib中
  • 您可能需要以root用户身份运行ldconfig来更新将名称(如libicui18n.so.44)映射到路径名(如/usr/local/lib/libicui18n.so.44)的库缓存
  • 另一个问题是,如果使用x86_64系统,64位库的正确库路径是/usr/local/lib64而不是/usr/local/lib。在本例中,在构建ICU时,将
    --libdir=/usr/local/lib64
    添加到
    /configure
    命令行

  • /usr/local是本地安装软件的目录层次结构/usr/bin、/usr/lib/等用于系统管理的文件(即由您的分发工具(如rpm-yum-dselect等)管理的文件)
  • 一般来说,您不应该将东西安装到/usr/lib中
  • 您可能需要以root用户身份运行ldconfig来更新将名称(如libicui18n.so.44)映射到路径名(如/usr/local/lib/libicui18n.so.44)的库缓存

  • 另一个问题是,如果使用x86_64系统,64位库的正确库路径是/usr/local/lib64而不是/usr/local/lib。在这种情况下,在构建ICU时,将
    --libdir=/usr/local/lib64
    添加到
    /configure
    命令行。

    3)调整后的LD_LIBRARY_路径仍将无法显示,例如autoconf。为此,请将路径添加到LDFLAGS:./configure LDFLAGS=-L/usr/local/lib。添加LD_LIBRARY_路径使示例正常运行,谢谢。然而,当我试图编译我的程序(它在ICU的早期版本上工作)时,我在链接过程中会遇到这样的错误。未定义对'icu_44::Calendar::getNow()的引用请发布nm-o--dynamic/usr/local/lib/libicu*.so | grep getNow
    T\u ZN6icu_448; Calendar6GetNowev
    的输出意味着
    icu_44::Calendar::getNow()
    确实是由您的新库导出的。您的链接线上有
    -licui18n
    吗?很可能。尝试将
    -L/usr/local/lib
    添加到链接行(在
    -licui18n
    之前)。这正是honk在上面所说的。3)调整后的LD_LIBRARY_路径仍然不会使其对例如autoconf可见。为此,请将路径添加到LDFLAGS:./configure LDFLAGS=-L/usr/local/lib。添加LD_LIBRARY_路径使示例正常运行,谢谢。然而,当我试图编译我的程序(它在ICU的早期版本上工作)时,我在链接过程中会遇到这样的错误。未定义对'icu_44::Calendar::getNow()的引用请发布nm-o--dynamic/usr/local/lib/libicu*.so | grep getNow
    T\u ZN6icu_448; Calendar6GetNowev
    的输出意味着
    icu_44::Calendar::getNow()
    确实是由您的新库导出的。您的链接线上有
    -licui18n
    吗?很可能。尝试添加
    -L/usr/local/lib