c++ - 使用我的程序分发共享对象

标签 c++ linker ld

我已经弄清楚我的程序需要哪些 .so 文件才能在其他机器上运行,但我不确定我需要对它们做什么才能确保我的程序能够找到它们并在执行时与它们链接。

我知道在 Windows 平台上,我可以将 .dll 文件转储到可执行文件的目录中并完成它。不过,在 Linux 上似乎并非如此。

$ ls
libjrtp.so.3.9.1  libjthread.so.1.3.1  libQtCore.so.4  libQtGui.so.4  streamer
$ ./streamer 
./streamer: error while loading shared libraries: libjrtp.so.3.9.1: cannot open shared object file: No such file or directory

我觉得奇怪的是程序无法链接到库,即使它基本上就在工作目录中。为什么没有链接?

最佳答案

它可能没有链接,因为 . 不在二进制文件的 RPATH 中(您可以使用 -R 来设置它)。 Unix 系统不会像 Windows 那样/过去那样在当前目录中查找所需的文件。您可以使用 ldd ./binary 确认这一点。

关于c++ - 使用我的程序分发共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8763393/

相关文章:

c - 为什么将额外参数传递给 C 函数不会导致编译时错误?

android - libdvm.so 位置

linker - 其他平台的 force_load 链接器标志

c++ - 如果 stat 语句不起作用

c++ - 无效的协变返回类型

c++ - C++中this指针的使用

macos - macOS 上的 NASM 间接寻址程序集不正确

c++ - 模板类的模板成员函数的类外定义语法

ios - apple mach-o linker error 链接器命令失败,退出代码为 1(使用 -v 查看调用)

gcc - 链接时 '-lfoo'和 '/path/to/libfoo.so'的区别