Как решить «collect2: ld вернул 1 статус выхода»? - PullRequest
8 голосов
/ 19 ноября 2010

когда я строю свой исходный код в Linux, я получаю сообщение об ошибке типа

qstring.cpp:(.text+0x2c01): undefined reference to `terminate(void)'
collect2: ld returned 1 exit status

Как решить эту проблему?

Ответы [ 3 ]

8 голосов
/ 19 ноября 2010

terminate определено в стандартной библиотеке C ++, поэтому убедитесь, что вы связываете это. Предполагая, что вы используете gcc для компиляции, вы должны использовать исполняемый файл g++ для компиляции исходного кода, не исполняемый файл gcc:

g++ source.cc -o output

При выполнении как g++ компоновщик автоматически связывает вас со стандартной библиотекой C ++ (libstdc ++). Если вместо этого вы выполняете gcc как обычный gcc, или вы напрямую вызываете компоновщик ld, то вам нужно самостоятельно добавить -lstdc++ для ссылки в библиотеке, например ::

gcc source.cc -o output -lstdc++  # Compile directly from source
ld source1.o source2.o -o output -lstdc++  # Link together object files
2 голосов
/ 19 ноября 2010

Вам необходимо выяснить, в каком объектном файле или библиотеке terminate находится файл, и включить его в команду компиляции / ссылки.

Если он находится в объектном или исходном файле, просто передайте его gcc (при условии, что вы на самом деле используете gcc, в противном случае метод, вероятно, будет аналогичным), как обычно.Если он находится в библиотеке, вам следует изучить опции -L (путь к библиотеке) и -l (имя библиотеки).

0 голосов
/ 19 ноября 2010

void terminate(void) { raise(9); }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...