我从源代码构建了一个库,并且这些库位于 ~/Desktop/xerces 中——我该如何安装这些库以便链接器可以找到它们?

我从源代码构建了一个库,并且这些库位于 ~/Desktop/xerces 中——我该如何安装这些库以便链接器可以找到它们?

从源代码构建库后,我在 ~/Desktop/xerces 中拥有一堆 .so 库。我现在想安装这些库(比如在 /usr/lib 中)并让 ld 拾取它们。我使用 sudo mv 手动将这些库复制到 /usr/lib 中,但没有成功(而且我认为这是错误的做事方式)。

答案1

我将把与我的评论相关的部分加粗。

取自:Xerces,Unix 安装


二进制分布

通过从压缩档案中提取文件来安装二进制发行版 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 手册更多细节

相关内容