查找 <lib>.so 当只有 <lib>.so.n 存在时,没有 sudo 权限

Finding <lib>.so when only <lib>.so.n exists, without sudo rights

我认为我遇到了与 this question 中描述的问题相同的问题:我正在尝试构建一个似乎正在搜索 libXi.so 的外部库,而我只有 [=37] =].6 在系统文件夹中(在 /lib64/ 中)。

具体来说,我收到的错误是

/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: cannot find -lXi

不幸的是,我没有 sudo 访问权限,并且无法遵循上述问题 link 中提出的相同解决方案:创建指向 libXi.so.6 的符号 link .

我尝试在我有权访问的文件夹中创建一个名为 libXi.so 的符号 link 到 libXi.so.6,然后将其添加到 LD_LIBRARY_PATH,但这没有用。

  1. 我是否正确诊断了问题,还是我遗漏了什么?
  2. 除了联系管理员之外,我还有哪些选择?

如果有帮助,我正在使用 CentOS 7。

谢谢。

编辑 可能相关的其他详细信息:我正在本地构建一个库 A,作为其构建过程的一部分,它会自动构建自己的外部依赖项 B(我假设 A 带有 B 的源代码,或者 A 正在自动下载B). B是需要libXi.so

的那个

I tried creating a symbolic link to libXi.so.6 called libXi.so in a folder that I do have access to, and then added that to LD_LIBRARY_PATH, but that didn't work.

LD_LIBRARY_PATH 由加载程序在运行时 搜索(一旦程序被 linked)。你在运行时没有问题,你在(静态)link 时间有问题。

假设您可以访问 $HOME 并创建了一个 symlink,如下所示:

ln -s /lib64/libXi.so.6 ~/libXi.so

你可以像这样使用那个符号link来link你的程序:

gcc main.o ... -L$HOME -lXi ...

或者,您应该能够直接使用 /lib64/libXi.so.6 来执行 link,如下所示:

gcc main.o ... /lib64/libXi.so.6 ...

更新:

I am installing a library A, which, as part of its build process, is automatically building its own external dependency B. B is the one which requires libXi.so.

这种情况的正确解决方案是找出包 libXi.so.6 来自哪个包,然后安装该包的 development 版本(它将包含正确的 libXi.so符号link).

令人惊讶的是 B 依赖项在未安装 libXi headers 的情况下构建。

Unfortunately, I do not have sudo access, and cannot follow the same solution

您必须与系统管理员合作以获得您需要在此系统上开发的包,或者您需要在不同的系统(可能是 VM,或 docker 容器)上开发,在您拥有管理员权限。

如果您不愿意这样做,那么您唯一的选择就是编辑 Makefiles。