id returned 1 exit status dev c

Понадобилась функция, делающая скриншот в программе и сохраняющая его в файл. Я нашёл несколько таких функций, но каждая (!) из них при добавлении в программу заставляет её выдавать при компиляции вот такую ошибку:

C:<папка_с_файлом.cpp>collect2.exe [Error] ld returned 1 exit status

Причём других ошибок нет, или я их исправляю. Обычно такая ошибка происходит, когда у меня код уже скомпилирован и запущен .exe, и я пытаюсь ещё раз его скомпилировать и запустить. Но, разумеется, я всё перепробовал, даже запускал код на другом компе (но тоже в Dev) — такая же ошибка.

Если убрать эту функцию, то код снова нормально работает. Подскажите, что делать?

Вот текущий код с одним из вариантов функции, делающий скриншот:

3 ответа 3

ld returned 1 exit status обычно означает, что у Вас в коде есть недопустимые символы. Они могут там быть даже если их вроде и не видно, например, русская буква е от английской e на первый взгляд ничем не отличается. Обычно это результат копипасты. Так как функция небольшая, то самый простой вариант для Вас решить проблему — переписать ее (вернее, всю копипасту) руками.

Update Так же, проблемой может быть неподключенная библиотека. Нужно посмотреть по списку подключенных заголовочных файлов, к каким библиотекам они относятся и в натсройках проекта добавить все отсутствующие библиотеки.

Проблемой может быть и какой-то неподключенный заголовочный файл. Тут надо смотреть по названиям используемых функций и искать заголовки, где они объявлены.

При неподключённой библиотеке или опечатке в определении метода линкер всегда указывает, какой именно метод неопределён. По его имени можно грепнуть, где он определяется и подлинковать либу.

Я столкнулся с такой же проблемой без какой-либо дополнительно информации от линкера, тоже долго чесал репу и искал опечатки, но в итоге заметил, что на диске, где собираюсь, мало места. Перенёс исходники на накопитель побольше — там сразу нормально слинковалось. Возможно, решение проблемы AlfredBauer’ом связано с тем же, т.к. 32-битные бинарники занимают меньше места.

В общем, при недостатке места на этапе линковки может выводиться подобное сообщение без поясняющей информации. Словил на CentOS 6.9, g++ 4.8.2, glibc 2.12.

For some reason, when I try compiling a program, the compiler says permission denied and Id returned 1 exit status. Could anyone tell me what that means? Thank you

The above is the binary search algorithm code I tried to compile.

11 Answers 11

I may guess, the old instance of your program is still running. Windows does not allow to change the files which are currently «in use» and your linker cannot write the new .exe on the top of the running one. Try stopping/killing your program.

I bet for sure, that this is because you didn’t close the running instance of the program before trying to re-compile it.

Generally, ld.exe returns 1 when it can’t access required files. This usually includes

  • Can’t find the object file to be linked (or Access denied )
  • Can’t find one or more symbols to link
  • Can’t open the executable for writing (or AD)

The program looks completely fine, so the second point should not hit. In usual cases, it’s impossible for ld to fail to open the object file (unless you have a faulty drive and a dirty filesystem), so the first point is also nearly impossible.

Now we get to the third point. Note that Windows not allow writing to a file when it’s in use, so the running instance of your program prevents ld.exe from writing the new linked program to it.

So next time be sure to close running programs before compiling.

батник:
PATH=%PATH%;c:MinGWin
g++ -fopenmp test.cpp -o test.exe
pause

в чем проблема? при запуске выдает ошибку
collect2.exe: error: ld returned 1 exit status

  • Вопрос задан более трёх лет назад
  • 8377 просмотров

На довольно давней версии mingw, имевшейся у меня, получилось сделать вот так — запустив компилятор и линкер раздельно.

Заодно пришлось скачать pthreads для win32, по умолчанию библиотеки (*.a) есть, а dll нет.

И вообще, это зависит от сборки MinGW. На свежих сборках mingw-w64 — как с Win32-, так и с posix-потоками — всё заработало именно по-твоему. И pthreads нашёлся.

Ну и, конечно, ты не указал, ПОЧЕМУ линкер вышел с кодом 1. Но это я уже сам понял, поэкспериментировав.

Оцените статью