如何通过系统库强制使用本地共享库?

我怎样才能强制使用本地库在Linux系统库?

我明确地将我的可执行文件链接到我的项目/ lib目录中的一些.so文件,例如(../lib/libluajit.so)。

在gdb下运行我的可执行文件或使用ldd显示它仍然使用系统libluajit-5.1.so.2

然后我将LD_LIBRARY_PATH设置到我的项目/ lib目录并导出它,然后运行我的可执行文件。 不知何故,它仍然拿起系统库(由gdb和ldd确认)

我想知道这怎么可能,以及我能做些什么来强制它在我的project / lib目录中使用本地的libluajit.so。

Solutions Collecting From Web of "如何通过系统库强制使用本地共享库?"

链接时,指定库的目录,并使用rpath:

  -Wl,-rpath,/ absolute / path / to / your / library -L /绝对/路径/ to / your / library -library 

-L在链接时告诉链接器在哪里找到你的库, -rpath指出它在运行时在哪里搜索库。

请注意, -L-rpath需要包含.so文件的目录,而不是库文件本身的实际路径。

我不得不质疑为什么你想在系统提供的版本上使用自己的库版本(有多个不同的版本漂浮只是麻烦和用户混淆的配方)。

但是,您应该能够export LD_PRELOAD=<path_to_your_shared_obj>以强制它加载您自己的版本。

请注意,没有机制来覆盖库版本将通过任何类型的权限提升(例如sudo )持续存在。