从源代码构建库后,我在 ~/Desktop/xerces 中拥有一堆 .so 库。我现在想安装这些库(比如在 /usr/lib 中)并让 ld 拾取它们。我使用 sudo mv 手动将这些库复制到 /usr/lib 中,但没有成功(而且我认为这是错误的做事方式)。
答案1
我将把与我的评论相关的部分加粗。
二进制分布
通过从压缩档案中提取文件来安装二进制发行版 xerces-c-3.1.1-{arch}-{os}-{compiler}.tar.gz。其中 {arch} 表示 CPU 架构,{os} 表示操作系统,{compiler} 表示您选择的 C++ 编译器。例如:
gzip -d xerces-c-3.1.1-x86-linux-gcc-3.4.tar.gz
tar -xf xerces-c-3.1.1-x86-linux-gcc-3.4.tar
这将创建一个包含 Xerces-C++ 二进制分发的“xerces-c-3.1.1-x86-linux-gcc-3.4”子目录。
您需要将 xerces-c-3.1.1-{arch}-{os}-{compiler}/bin 目录添加到您的 PATH 环境变量中:
对于 Bourne Shell、K Shell 或 Bash,输入:
export PATH="$PATH:<full-path-to-xerces-c-3.1.1-{arch}-{os}-{compiler}>/bin"
对于 C Shell,输入:
setenv PATH "$PATH:<full-path-to-xerces-c-3.1.1-{arch}-{os}-{compiler}>/bin"
如果您希望使此设置永久生效,则需要通过更改设置文件(可以是 .profile 或 .kshrc)来更改您的配置文件。
此外,您还需要设置库搜索路径。(AIX 上为 LIBPATH,Solaris 和 Linux 上为 LD_LIBRARY_PATH,HP-UX 上为 SHLIB_PATH,Mac OS X 上为 DYLD_LIBRARY_PATH)。
在以下 shell 命令中, 表示 xerces-c-3.1.1-{arch}-{os}-{compiler} 目录的完整路径。对于 Bourne Shell、K Shell 或 Bash,请键入:
export LIBPATH=<xerces-path>/lib:$LIBPATH (AIX)
export LD_LIBRARY_PATH=<xerces-path>/lib:$LD_LIBRARY_PATH (Solaris, Linux)
export SHLIB_PATH=<xerces-path>/lib:$SHLIB_PATH (HP-UX)
export DYLD_LIBRARY_PATH=<xerces-path>/lib:$DYLD_LIBRARY_PATH (Mac OS X)
对于 C Shell,输入:
setenv LIBPATH "<xerces-path>/lib:$LIBPATH" (AIX)
setenv LD_LIBRARY_PATH "<xerces-path>/lib:$LD_LIBRARY_PATH" (Solaris, Linux)
setenv SHLIB_PATH "<xerces-path>/lib:$SHLIB_PATH" (HP-UX)
setenv DYLD_LIBRARY_PATH "<xerces-path>/lib:$DYLD_LIBRARY_PATH" (Mac OS X)
二进制发行版包含预构建的解析器库和示例可执行文件。请参阅示例如何运行示例。
更新
无论是源代码还是二进制文件,都必须使用上面的某个代码片段导出库路径,因为导出语句会告诉编译器和链接器在哪里查找您的库。
更新 2
如果失败,你可以安装来自存储库的 xerces-c使用sudo apt-get install xerces-c
答案2
在 Ubuntu 上使用缓存文件和默认路径ld.so
查找并加载程序所需的共享库,然后。/etc/ld.so.cache
/lib
/usr/lib
根据 ldconfig 手册:
ldconfig 创建、更新和删除指向命令行上指定的目录、文件 /etc/ld.so.conf 和受信任目录 (/usr/lib 和 /lib) 中的最新共享库的必要链接和缓存(供运行时链接器 ld.so 使用)。ldconfig 检查所遇到的库的标头和文件名,以确定哪些版本的链接应该更新。ldconfig 在扫描库时会忽略符号链接。
您应该将您的库复制到/path/as/you/like/lib
目录中并创建您的 ld 配置文件:
sudo echo "/path/as/you/like/lib" > /etc/ld.so.conf.d/myLibrary.conf
之后运行:
sudo ldconfig -v
如果/etc/ld.so.conf.d/
不存在,您应该在文件末尾添加行广告/etc/ld.so.conf
。
以下是ldconfig 手册更多细节