作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将我的一个项目链接到一组特定的自定义编译库,这些库位于项目的基本目录 [proj_dir]/lib - 而不是任何系统的/lib、/usr/lib 或/usr/local/lib - 避免与这些相同库的已安装库存版本发生冲突。
我可以通过使用 -L
标志传递库路径来编译项目,但是在加载共享库 libXXX.so 时出现 错误:无法打开共享对象文件:当我运行编译后的二进制文件时,没有这样的文件或目录
,ldd
告诉我它找不到那些特定的库。
另一方面,如果我将 LD_LIBRARY_PATH=[proj_dir]/lib
传递给可执行文件,我就可以毫无问题地运行它。不过,有没有办法隐式链接这些库,而无需在运行时手动设置 LD_LIBRARY_PATH
?
最佳答案
你可以
LD_LIBRARY_PATH
在调用实际程序之前(更灵活)。-Wl,-rpath=<directory>
到您的链接器选项以将目录添加到运行时库搜索路径。所以假设你有一个 libfoo.so
并且您的程序和 DSO 位于同一目录中,您的编译命令可能如下所示:gcc -o myprogam main.c -L. -lfoo -Wl,-rpath='$ORIGIN'
.更新:正如 Maxim 正确指出的那样,设置 -rpath=.
is dangerous and should be avoided .
对于 -Wl,
, 请参阅 gcc manpage和 -rpath
查看ld manpage .
关于c++ - 运行时链接到不在 LD_LIBRARY_PATH 上的动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50762540/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!