ld: неверная версия 3 (макс. 0) - ошибка при добавлении символов: неверное значение - PullRequest
1 голос
/ 23 марта 2020

Я использую g ++ 9.2.1 и binutils 2.34. Я использую Manjaro 19.0.2 с linux ядром 5.4.23-1. Все получается из бесплатной sh установки Manjaro, которую я только что сделал, думая, что это решит проблему.

При компиляции следующей супер простой программы:

#include <iostream>

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

    return 0;
}

Если я запустлю g++ main.cpp -o program, все в порядке, и я получаю Hello при выполнении ./program.

Однако, когда я запускаю 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

Я понятия не имею, откуда это может появиться.

1 Ответ

2 голосов
/ 23 марта 2020

g++ main.cpp -o main.o не создает перемещаемый объектный файл. Вместо этого получается исполняемый файл. Такой файл не может быть использован для дальнейших ссылок.

Чтобы создать объектный файл, используйте g++ -c main.cpp -o main.o. Флаг -c указывает G CC не связывать конечный исполняемый файл.

...