如何强制使用本地共享库而不是系统库
How to force using local shared libraries over system libraries?
如何在 Linux 中强制使用本地库而不是系统库?
我将我的可执行文件显式链接到我的项目/lib 目录中的一些 .so 文件,例如 (../lib/libluajit.so).
在 gdb 下运行我的可执行文件或使用 ldd 表明它仍然使用 libluajit-5.1.so.2 系统
然后,我将LD_LIBRARY_PATH设置为我的项目/lib 目录并将其导出,然后运行我的可执行文件。不知何故,它仍在拾取系统库(由 gdb 和 ldd 确认)
我想知道这怎么可能,以及我可以做些什么来强制它使用我的项目/lib 目录中的本地 libluajit.so。
链接时,请指定库的目录,并使用 rpath:
-wl,-rpath,/absolute/path/to/your/library -L/absolute/path/to/your/library -llibrary
-L
告诉链接器在链接时在哪里可以找到库,-rpath
告诉它在运行时在哪里搜索库。
请注意,-L
和-rpath
需要包含 .so 文件的目录,而不是库文件本身的实际路径。
我不得不质疑为什么你想使用自己的库版本而不是系统提供的版本(有多个不同的版本浮动只不过是麻烦和用户混淆的秘诀)。
但是,您应该能够export LD_PRELOAD=<path_to_your_shared_obj>
强制它加载您自己的版本。
请注意,覆盖库版本的机制不会通过任何类型的特权提升(例如 sudo
)保留。
相关文章:
- 实验性文件系统库不完整C++?
- 无法链接文件系统库C++
- 无法识别 Mac c++ 文件系统库
- 获取 clang++:错误:在编译文件系统库的代码时
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 如果 copts 不允许系统路径,如何引用外部依赖项使用的系统库?
- 从 make 调用 CMake 以获取系统库路径
- ASAN 检测与动态加载库共享的类的 vtable 的 ODR 违规
- 如何使用文件系统库获取"true"文件大小?(C++17)
- 如何在没有系统/库的情况下控制GPIO
- 为什么主可执行文件和 dlopen 加载的共享库共享命名空间静态变量的一个副本?
- 如何使用 c++ 文件系统库将文件复制到另一个目录
- 如何在Bazel中静态链接系统库
- GCC 显示系统库中的错误.-iSystem 不起作用
- 使用boost ::文件系统库中的输出中的奇怪字符
- libstdc++ 系统库在 OpenBSD 和 FreeBSD 上没有剥离
- SWIG - C ++到Python.链接系统库
- 我无法编译文件系统库
- 如何强制使用本地共享库而不是系统库
- 我可以提供我的程序的linux二进制文件与我的系统的共享库吗?