【问题标题】:ld: Invalid version 3 (max 0) - error adding symbols: Bad valueld:版本 3 无效(最大 0) - 添加符号时出错:值错误
【发布时间】:2020-07-03 22:55:55
【问题描述】:

我正在使用 g++ 9.2.1 和 binutils 2.34。我正在使用 Linux 内核 5.4.23-1 运行 Manjaro 19.0.2。一切都来自我刚刚安装的 Manjaro 的全新安装,我认为它会解决问题。

在编译以下超级简单程序时:

#include <iostream>

int main()
{
    std::cout << "Hello" << std::endl;

    return 0;
}

如果我运行g++ main.cpp -o program,一切都很好,并且在执行 ./program 时我会收到 Hello。

但是,当我运行 g++ main.cpp -o main.o 时,它可以工作,但是当我运行 g++ main.o -o 程序时,我收到以下错误:

/usr/bin/ld: main.o: _ZSt4cout: invalid version 3 (max 0)
/usr/bin/ld : main.o : error adding symbols: bad value
collect2: error: ld return 1 exit status

我完全不知道它可能来自哪里。

【问题讨论】:

    标签: c++ g++ linker-errors ld


    【解决方案1】:

    g++ main.cpp -o main.o 不会生成可重定位的目标文件。输出是一个可执行文件。这样的文件不能用于进一步的链接。

    要生成目标文件,请改用g++ -c main.cpp -o main.o-c 标志指示 GCC 不要链接最终的可执行文件。

    【讨论】:

    • 非常感谢。这是一个如此愚蠢和简单的修复,我真的觉得自己像个菜鸟(我就是,哈哈)
    【解决方案2】:

    -o 用于保存编译文件的名称,例如 g++ -o xyz xyz.cpp 这里 xyz 是编译文件的名称。 main.o 更改了编译文件渲染错误的幻数,而不是只保留 main

    g++ -o main main.cpp

    这应该没有问题

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多