我已经弄清楚我的程序需要哪些 .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/