【发布时间】:2010-11-25 03:02:27
【问题描述】:
我编写了一些自定义 c++ 代码,它在 ubuntu 中运行良好,但是当我将它上传到我的服务器(使用 centos 5)时,它失败并说库已过期。我到处搜索,centos 无法使用最新的库。如何针对 stl 进行编译,以便将其包含在二进制文件中,而 centos 使用旧库并不重要?
附:我不想将源上传到服务器并在那里编译。
【问题讨论】:
标签: c++ stl ubuntu compilation centos
我编写了一些自定义 c++ 代码,它在 ubuntu 中运行良好,但是当我将它上传到我的服务器(使用 centos 5)时,它失败并说库已过期。我到处搜索,centos 无法使用最新的库。如何针对 stl 进行编译,以便将其包含在二进制文件中,而 centos 使用旧库并不重要?
附:我不想将源上传到服务器并在那里编译。
【问题讨论】:
标签: c++ stl ubuntu compilation centos
您可以在您的 Ubuntu 机器上安装适合您服务器上库版本的编译器。
您可以使用 libstdc++.so 发布您的应用程序,该文件取自您编译它的系统,前提是您调整链接以便加载它而不是 centos 的。
你可以静态编译它。为此,您应该将编译器从 g++ 切换到
gcc -lgcc_s -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
选择你喜欢的。请注意,方法 (2) 和 (3) 可能会出现依赖问题:您的项目(特别是静态链接的 stdc++ 实现,现在是您的应用程序的一部分)可能需要在系统库中显示一些函数仙人掌。如果没有这些功能,您的应用程序将无法启动。发生这种情况的原因是您正在编译的 ubuntu 系统较新,并且在 linux 库中未保留前向兼容性。
【讨论】:
在您的链接步骤中,您可以简单地将“-static”标志添加到 gcc: http://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Link-Options.html#Link-Options
【讨论】: