gpt4 book ai didi

更改共享库的链接

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:53 25 4
gpt4 key购买 nike

我有一个可执行文件 A,它使用 dlopen 打开共享库 libB.so(位于同一目录中,所以我执行 LD_LIBRARY_PATH=. 让我的程序正确找到它)。这个库 libB.so 应该在 libC.so 中找到它的一些符号,它也位于同一目录中。

然而,在/usr/lib64 中也有一个 libC.so(它是用不同的参数编译的,所以它没有相同的符号)并且出于未知原因,libB.so 试图打开这个在同一目录中的那个。当我执行 ldd libB.so 时,我可以看到 libC.so =>/usr/lib64/libC.so 而不是 libC.so =>/path/to/program/A/libC.so.

有没有办法更改 libB.so 中的此链接(如果可能,无需重新编译),或者如果我应该重新编译 libB.so,是什么让编译器选择在/usr/lib64 中使用 libC.so 而不是其他一个?

(注意:替换/usr/lib64 中的 libC.so 不是一个选项,因为我不是平台的管理员)

谢谢

最佳答案

如果我正确理解联机帮助页,LD_LIBRARY_PATH 应该取代系统范围的路径,如 /usr/lib64,所以我不确定为什么这不起作用。

是setuid/setgid程序吗? LD_LIBRARY_PATH 将被忽略。

当前路径 (.) 是否发生变化,使得 LD_LIBRARY_PATH=. 不再让 libB 找到 libC?

通过 strace 运行您的程序应该让您看到 ldd 正在检查 libC 的目录;这可能会帮助您调试搜索的位置和方式。

关于更改共享库的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11744278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com