1

我编写了一些自定义 c++ 代码,它在 ubuntu 中运行良好,但是当我将它上传到我的服务器(使用 centos 5)时,它失败并说库已过时。我到处搜索,centos 无法使用最新的库。如何针对 stl 进行编译,以便将其包含在二进制文件中,而 centos 使用旧库并不重要?

PS我不想将源上传到服务器并在那里编译。

4

2 回答 2

3

在链接步骤中,您可以简单地将“-static”标志添加到 gcc: http: //gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Link-Options.html#Link-Options

于 2009-09-02T22:51:58.407 回答
1
  1. 您可以在您的 Ubuntu 机器上安装适合您服务器上库版本的编译器。

  2. 您可以使用从您编译它的系统获取的 libstdc++.so 发布您的应用程序,前提是您调整链接以便加载它而不是 centos 的。

  3. 您可以静态编译它。为此,您应该将编译器从 g++ 切换到

    gcc -lgcc_s -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic

选择你喜欢的任何东西。请注意,方法 (2) 和 (3) 可能会出现依赖问题:您的项目(特别是静态链接的 stdc++ 实现现在是您的应用程序的一部分)可能需要一些函数来呈现在系统库中仙人掌。如果没有这些功能,您的应用程序将无法启动。发生这种情况的原因是您正在编译的 ubuntu 系统较新,并且 linux 库中没有保留前向兼容性。

于 2009-09-02T22:52:15.363 回答