C++ Linux安装库(ICU)问题
我是安装库的相对新手。我的系统目前有一个旧版本的库(3.8),我想去最新的(4.4) 按照ICU readme.html中的步骤,一切正常(echo$?为每个步骤生成所有0)。我看到库被安装到了/usr/local/lib。但是,库的当前版本安装在/usr/lib中 我的问题 1) 这两个地点之间是否存在“组织”或其他显著差异 2) 如何将新库的安装路径更改为/usr/lib 3) 库位于错误的位置是否是我运行ICU目录中的示例时,得到“加载共享库时出错:libicui18n.so.44”的原因 谢谢大家。/usr中的内容直接属于您的发行版,除非通过其软件包管理器进行修改,否则不应进行修改。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”的原因
/usr/local
中的内容属于本地安装,由您自行管理。因此,将较新libICU的本地安装放在/usr/local/lib
中是正确的
2) 在构建ICU时,您可以通过调整一些设置来做到这一点——我不能给您具体的建议,因为我不知道构建ICU使用什么。但是,您不应该这样做,因为这将覆盖发行版的文件,这可能导致任意可怕的破坏
3) 有点。问题不是库安装在错误的位置,而是/usr/local/lib
不在默认搜索路径中。您可以通过两种方式解决此问题:
- 使用此shell命令暂时为您自己:
export LD_LIBRARY_PATH=/usr/local/lib
- 对于所有用户,通过将
添加到/usr/local/lib
中的列表,然后以root用户身份运行/etc/ld.so.conf
来永久使用ldconfig
/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
中的列表,然后以root用户身份运行/etc/ld.so.conf
来永久使用ldconfig
--libdir=/usr/local/lib64
添加到/configure
命令行
另一个问题是,如果使用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 getNowT\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 getNowT\u ZN6icu_448; Calendar6GetNowev
的输出意味着icu_44::Calendar::getNow()
确实是由您的新库导出的。您的链接线上有-licui18n
吗?很可能。尝试添加-L/usr/local/lib