静态编译libc ++

时间:2009-09-02 22:44:38

标签: c++ stl ubuntu compilation centos

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

  1. 您可以在您的Ubuntu盒子上安装适合您服务器上库版本的编译器。

  2. 您可以使用libstdc ++运送您的应用程序。所以请从您编译它的系统中获取,只要您调整链接以便加载而不是使用centos一个。

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

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

  4. 选择你喜欢的任何东西。请注意,方法(2)和(3)可能会产生依赖性问题:您的项目(特别是静态链接的stdc ++实现现在是您的应用程序的一部分)可能需要一些函数才能在系统库中显示CentOS的。如果没有此类功能,您的应用程序将无法启动。它可能发生的原因是你正在编译的ubuntu系统是更新的,并且在linux库中不保留向前兼容性。