【问题标题】:compile against libc++ statically静态编译 libc++
【发布时间】:2010-11-25 03:02:27
【问题描述】:

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

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

【问题讨论】:

    标签: c++ stl ubuntu compilation centos


    【解决方案1】:
    1. 您可以在您的 Ubuntu 机器上安装适合您服务器上库版本的编译器。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-28
        相关资源
        最近更新 更多