我的朋友无法在他的 linux 发行版上运行我的 openGL 程序

My friend can't run my openGL program on his linux distro

本文关键字:运行 我的 程序 openGL linux 我的朋友      更新时间:2023-10-16

我正在ubuntu上编程一个opengl应用程序,它的编译和运行都很好。但当我把我的程序(是的,就是在发布模式下编译的程序)发送给我的朋友时,我认为他正在运行普通的debian,这个程序对他不起作用。他告诉我他错过了一些图书馆。所以我想知道:如果我把我正在使用的库(.So文件)和程序一起发给他,他能运行吗?我运行了lddtree,这里是输出:

game => ./game (interpreter => /lib/ld-linux.so.2)
libGL.so.1 => /usr/lib/libGL.so.1
    libnvidia-tls.so.280.13 => /usr/lib/libnvidia-tls.so.280.13
    libnvidia-glcore.so.280.13 => /usr/lib/libnvidia-glcore.so.280.13
    libXext.so.6 => not found
    librt.so.1 => not found
    libdl.so.2 => not found
libX11.so.6 => not found
libXxf86vm.so.1 => not found
libstdc++.so.6 => not found
libm.so.6 => not found
libgcc_s.so.1 => not found
libc.so.6 => not found
libpthread.so.0 => not found

(这是我电脑的输出,不是他的)谢谢

这比向他发送二进制文件稍微复杂一些。您可能需要构建一个Debian包。

很可能您正在针对不同的版本进行编译(例如libc——我保证他有,但可能与您的版本不匹配)。

最好的解决方案是向他发送源代码并让他编译(假设他所要做的就是键入make)。

除此之外,您还可以为他的Debian版本交叉编译它,或者静态链接所有内容。不过,我不知道该怎么做。

为linux构建可重新分发的二进制文件是完全可行的。这只需要一些额外的工作。以Blender为例。

Listaller的人创建了一些工具和库来帮助这个过程。我建议你阅读他们的文件。

http://listaller.tenstral.net/

不幸的是,大多数有趣的文档都从互联网上消失了(为什么?),但你仍然可以在Wayback Machine中找到它们。查找"binreloca"answers"Autopackage"

更新

现在,在您的案例中,规范的解决方案是重新构建所有必需的库(独立于分发二进制文件),并将它们与中的相对路径链接。很抱歉,我没法把细节告诉你,因为坦率地说,我不记得了。我首先得重新检查一下我的笔记,可能还要修修补补。

如果你正在寻找灵感,只需看看Blender是如何做到的。