查找 <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,但这没有用。
- 我是否正确诊断了问题,还是我遗漏了什么?
- 除了联系管理员之外,我还有哪些选择?
如果有帮助,我正在使用 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 容器)上开发,在您拥有管理员权限。
如果您不愿意这样做,那么您唯一的选择就是编辑 Makefile
s。
我认为我遇到了与 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,但这没有用。
- 我是否正确诊断了问题,还是我遗漏了什么?
- 除了联系管理员之外,我还有哪些选择?
如果有帮助,我正在使用 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 容器)上开发,在您拥有管理员权限。
如果您不愿意这样做,那么您唯一的选择就是编辑 Makefile
s。