当前位置: 首页 > 面试题库 >

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

闻深
2023-03-14
问题内容

如何在Linux中的系统库上强制使用本地库?

我将可执行文件显式链接到我的project / lib目录中的某些.so文件,例如(../lib/libluajit.so)。

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

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

我想知道这是怎么可能的,以及如何使它强制使用我的project / lib目录中的本地libluajit.so。


问题答案:

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

-Wl,-rpath,/绝对/路径/到/您/库-L /绝对/路径/到/您/库-库

-L告诉链接器在链接时在哪里可以找到您的库,并-rpath告诉它在运行时在哪里可以搜索该库。

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



 类似资料:
  • 问题内容: 这是Linux编程书的引文: 假设这两个和是available.Then链接器必须选择的图书馆之一,而不是other.The链接搜索每个目录(第那些指定的选项,然后将这些在标准目录)。当链接器找到了一个包含目录无论是或,链接器将停止搜索目录。如果目录中仅存在两个变体之一,则链接器将选择该变体。否则,除非另有明确指示,否则链接程序将选择共享库版本。您可以使用该选项来请求静态归档。例如,即

  • 我有一个django项目与PostgreS数据库。我需要在docker容器中使用我的本地数据库。如何与docker容器共享机器的localhost?My Docker-compose.yml: Django Settings.py: 我添加了 现在我有一个错误: 谁能帮我?求求你!

  • 我已经编写了一个库,过去我使用自编的Makefile编译它,但现在我想切换到cmake。树是这样的(我删除了所有不相关的文件): 我只是想把它编译到一个共享的文件库中。 我发现的大多数示例都使用一些共享库编译可执行文件,但绝不仅仅是一个普通的共享库。如果有人能告诉我一个使用cmake的非常简单的库,那也会很有帮助,所以我可以用这个作为例子。

  • 问题内容: 我的机器在端口8080上运行着jboss,我想在网络上共享jboss服务器,以便我使用jbossws- native-4.0.2运行jboss服务,但是我仍然无法访问网络上的jboss服务器,请帮助。 问题答案: 启动jboss(run.sh或run.bat)时使用选项-b 0.0.0.0,这会将端口绑定到所有网络接口。默认值为localhost,这就是为什么您无法通过网络访问服务器的

  • 将以上内容更改为 解决了问题。但是,与其将Scala-XML2.11版本1.0.5排除在scalatest之外,我想强制scala编译器使用Scala-XML2.11版本1.0.5而不是版本1.0.4。(我在https://mvnrepository.com上研究了这些版本。)因此,我尝试将替换为 然而,这导致 [警告]*org.scala-lang:scala-library:(2.11.8,2

  • 问题内容: 有什么方法可以从Java代码中调用库中的函数吗?通常,可以在Java程序中使用Linux 库吗? 问题答案: 答案是“ JNI” :) 这里有几个链接: 如何在Linux上为JNI应用程序编译动态库? http://learn-from-the-guru.blogspot.com/2007/12/java-native-interface-jni-tutorial-hell.html