我的 C++ 应用程序依赖于 GCC、MongoDB C++ 驱动程序和 Boost。我目前的方法是保持操作系统的一致性。我在 Ubuntu 12.04 64 位桌面上开发 C++,并将其部署在 Ubuntu 12.04 64 位服务器上。此外,我应该在目标服务器上安装相同版本的依赖项。 但是如果我想在 Ubuntu 13.04 上开发我的 C++ 应用程序并使用最新的 Boost、MongoDB 驱动程序和 GCC 4.8.1,这种方式很容易在 Ubuntu 12.04 服务器上部署 C++ 应用程序。
- 静态链接
- 动态链接,同时部署所有依赖到目标服务器?
哪种方式简单?有时,我无法在目标服务器上编译库。
最佳答案
如果依赖关系很小,最简单的方法是静态编译所有内容。这在构建步骤中相当容易,不需要任何花哨的东西。但是,对于更大的库和更大的项目,这可能会带来不便。
我认为最佳实践是将依赖项编译到共享对象中,将它们与二进制文件一起发送,并以 ld
将首先查找您的内容的方式执行内容。我认为例如使用 LD_LIBRARY_PATH
是可能的,例如LD_LIBRARY_PATH=/where/did/i/ship/lib:$LD_LIBRARY_PATH my_binary
。
这可能有点麻烦,因为您需要设置构建系统以将内容编译为共享对象并正确打包所有内容。
我很确定为 linux 提供的一些预编译程序以这种方式工作。奇怪的是,目前我手下找不到任何自定义预编译的应用程序。
关于c++ - 如何在 Linux 上部署 C++ 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17870992/