我的朋友无法在他的 linux 发行版上运行我的 openGL 程序
Posted
技术标签:
【中文标题】我的朋友无法在他的 linux 发行版上运行我的 openGL 程序【英文标题】:My friend can't run my openGL program on his linux distro 【发布时间】:2012-02-15 01:18:53 【问题描述】:我正在 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
(这是我电脑的输出,不是他的) 谢谢。
【问题讨论】:
没有libX11
,您的朋友如何运行图形anything?
他有 X11 库。输出是我的 openGL 应用程序使用的库。它说“未找到”的方式很奇怪。
可能值得检查二进制文件是否编译为 32 位,而您朋友的机器是 64 位(反之亦然)...如果二进制文件是 32 位,您可能只需要安装必要的 32 位兼容性包。
【参考方案1】:
这比向他发送二进制文件要复杂一些。您可能需要build a Debian package。
【讨论】:
同一个问题:像 desura 这样的 Linux 游戏需要在许多 Linux 发行版上运行的应用程序呢? 我对它们不熟悉,但我猜它们对每个 Linux 发行版都有一个包。开源的可以使用 config/make 之类的东西在客户端机器上编译。【参考方案2】:您很可能正在针对不同的版本进行编译(例如 libc ——我保证他有它,但它可能与您的版本不匹配)。
最好的解决办法是把源代码发给他,让他编译(假设他只需输入make
)。
除此之外,您可以为他的 Debian 版本交叉编译它,或者静态链接所有内容。不过我不知道该怎么做。
【讨论】:
好的,例如,desura 上的游戏呢?它们运行良好,并且可能在许多发行版上运行?【参考方案3】:为 linux 构建可再分发的二进制文件是完全可行的。它只需要一些额外的工作。以搅拌机为例。
Listaller 的人创建了一些工具和库来帮助完成这个过程。我建议你阅读他们的文档。
http://listaller.tenstral.net/
不幸的是,大多数有趣的文档都从互联网上消失了(为什么?),但您仍然可以在 Wayback Machine 中找到它们。寻找“binreloc”和“Autopackage”
更新
现在,在您的情况下,规范的解决方案是重新构建所有必需的库(独立于分发二进制文件)并将它们与相对路径链接到。抱歉,我无法将细节告诉你,因为坦率地说,我不记得了。我首先必须重新检查我的笔记,并且可能会修补。
如果您正在寻找灵感,只需看看 Blender 是如何做到的。
【讨论】:
以上是关于我的朋友无法在他的 linux 发行版上运行我的 openGL 程序的主要内容,如果未能解决你的问题,请参考以下文章
相同的 shell 脚本在不同的 Linux 发行版上具有不同的行为
在当前 Linux 发行版上打包 C++11 软件是不是安全?