我们正在 Linux 下构建一个程序,它可以在特定的 Ubuntu 版本中正常运行。但我们希望在 Ubuntu 10.04 和 11.10 上运行相同的二进制文件。 在 10.04 平台上构建应用程序是完全可以的。但是当我这样做时,我依赖于特定库版本(例如 libboost_thread.so.1.40.0),这些版本在 11.10 上不可用,因为它使用较新的版本。该系统是使用 QMake 构建的。
我正在寻找如何解决多个 Ubuntu 平台的依赖冲突的教程或起点。
最佳答案
如果没有其他人愿意尝试一下,我不妨注入(inject)一些东西。
我将做一些假设。
- 您正在分发二进制/闭源应用程序
- 您想自己分发
因此排除了整个“让发行版/用户自己为他们的设置构建它”。
看看其他人是如何解决类似问题的,我发现通常将共享库包含在您的应用程序中,然后使用加载器/包装器,您想要调用它,在启动应用程序之前修改环境的脚本.具体来说,他们修改了 LD_LIBRARY_PATH 以包含应用程序附带的/lib 文件夹。
脚本可以很简单。
#!/bin/sh
LD_LIBRARY_PATH=./lib ./myAppReal
这就是我如何解决将 Qt4 应用程序分发给分发版本不高于 Qt-3.3.6(2009 年......严重)的用户的方法。 编辑: 用户也可能会说,我指的是公司里 5 岁左右的人为开发付费,我们这方面的规范失败没有要求他们在现代操作系统上跨平台时更具体.
现在有人可能会发现这里有很多问题,但这很好,我可以随时更新和学习。
编辑:正如 JimR 所说,这会带来安全隐患,如果您将 libs 文件夹设置为可写,则有人可能会利用它向您的应用程序中注入(inject)恶意代码。根据您计划的部署方式,它可能是也可能不是真正的问题,但您应该意识到这一点。
关于c++ - 为各种 Ubuntu 版本编译 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9329281/