c++ - 为各种 Ubuntu 版本编译 C++

标签 c++ ubuntu

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

相关文章:

c++ - 为什么在C++中的类中定义方法时不存在多重定义错误?

C++ 查找/替换字符串

python - 为什么运行 SQLite(通过 python)会导致内存填满 "unofficially"?

ubuntu - Logstash 和 iptables

google-app-engine - 为什么我不能 `sudo apt-get update && sudo apt-get install google-cloud-sdk` ?

ubuntu - Docker 构建失败并出现 Hash Sum Mismatch 错误

c++ - ODBC 文档清晰度

c++ - 不能将规范与 fmt 库混合

c++ - 编译时字符串中的字符序列,无需递归

python - 从当前位置运行 python 文件到另一个位置?