【问题标题】:Running a program compiled from clang+llvm on another machine在另一台机器上运行由 clang+llvm 编译的程序
【发布时间】:2012-04-09 22:23:41
【问题描述】:

我正在通过 clang+llvm(3.1 版)编译一个程序,并尝试在具有相同 clang+llvm 版本的计算机上运行它。我在 Ubuntu 10 上编译,但我尝试运行的另一台计算机有 CentOS 5。在那里(在 CentOS 中),我也遇到了通过 LLVM 编译的问题(编译器通道在 LLVM 中实现)。这就是为什么我考虑在 Ubuntu 上编译,从那里获取 exe,然后在 CentOS 机器上运行它。

但是,当我尝试这样做时,出现以下错误。

./main: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./main)
./main: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./main)

我该如何解决这个问题。请注意,我在该机器上没有 root 访问权限。

【问题讨论】:

    标签: c linux centos llvm clang


    【解决方案1】:

    交叉编译始终是一个难题。在您的情况下,您在两台机器上有不同的 c++ 库版本。如果您不需要经常这样做,我建议您尝试在 CentOS 上解决您的编译问题。这可能是更简单的方法。

    【讨论】:

    • 是的。 GCC 是一个编译器套件,因此它带有一个 c++ 和一个 c 编译器。由于您的 c++ 库不匹配,因此您的 c 库也不匹配。
    【解决方案2】:

    一种解决方案是将库从工作的 Ubuntu 机器复制到 CentOS 机器。放入您的 Home/Workdir/whereever(TM) 并将您的 LD_PRELOAD 变量设置为该库。但这可能非常乏味,因为这可能不是唯一缺少的库(并且库可能依赖于其他库,您也需要这些库......)。

    这也只有在两台机器具有相同架构的情况下才有效(例如,如果您的 ubuntu 机器是 32 位而您的 CentOS 是 64,则它不会工作)。

    【讨论】:

    • 我想到的另一个选择是静态编译程序(即包含所有必要的库函数)。
    【解决方案3】:

    Centos 5 使用的 libstdc++ 版本比 Ubuntu 11.04 或 11.10 旧,因此无法使用那里的二进制文件。

    要么在 Centos 5 上编译,要么找到一个可以工作的旧编译环境。如果您使用的是 gcc,您还可以研究 LSB 编译器环境。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-22
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 2012-09-29
      • 2019-10-26
      相关资源
      最近更新 更多