我的朋友无法在他的 linux 发行版上运行我的 openGL 程序
My friend can't run my openGL program on his linux distro
我正在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是如何做到的。
- system() 无法运行我的程序,因为空间
- 运行我的代码时出现分段错误(核心转储)问题
- 正在尝试循环回到开始以再次运行我的程序
- arm_data在第二次运行我的程序时中止失败,然后
- 我想在终端窗口中运行我的 CLion 程序
- 如何在关闭Qt控制台应用程序之前运行我的析构函数?
- 使用 dev-c++ 运行我的 GIS 应用程序可以"gdal201.dll is missing"
- 当我运行我的程序时,即使"user"输入数字||C++ 绘画作业
- Inno设置编译器未运行我的C/C 代码
- 在代码块中运行我的第一个图形程序
- 正在重新运行我的主方法
- 如何在MacOS上使用根特权运行我的应用程序
- C++ Xcode 不会运行我的 for 循环(很短)
- STLPORT.5.2.dll 和视觉C++之间有什么关系?我是否需要 stlport 才能运行我的程序
- 无法通过循环运行我的代码,但是手动复制和粘贴有效
- 运行我的SFML脚本的问题
- 在Visual Studio 2012中运行我的OpenCV代码时无法找出'u202A'警告
- dev为什么dev-C++不运行我的程序
- 每当我尝试在codelite中运行我的项目时,任何更改我'We让人觉得被忽视了
- 在旧版本的linux上运行我的代码