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

时间:2012-02-15 01:18:53

标签: c++ linux opengl ubuntu debian

我正在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

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

3 个答案:

答案 0 :(得分:1)

比向他发送二进制文件要复杂一点。您可能需要build a Debian package

答案 1 :(得分:0)

很可能你正在针对不同的版本进行编译(例如libc - 我保证他有它,但它可能与你的版本不符)。

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

除此之外,您可以将其交叉编译为他的Debian版本,或静态链接所有内容。我不知道怎么做其中任何一个。

答案 2 :(得分:0)

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

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

http://listaller.tenstral.net/

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

更新

现在,在您的情况下,规范解决方案是重新构建所有必需的库(独立于分发二进制文件)并将它们与相对路径链接。对不起,我无法告诉你我的细节,因为坦率地说,我不记得了。我首先必须再次阅读我的笔记,并且可能会修补。

如果您正在寻找灵感,请看看Blender是如何做到的。