collect2: ошибка: LD завершается сигналом 11 [ошибка сегментации], ядро сбрасывается

Я изучал OpenGL, используя GLFW, и в то время не имел большого понимания makefiles. У меня работал OpenGL, но я решил узнать makefiles больше. Я придумал это после многих веб-сайтов, часов, проб и ошибок:

EXENAME = "OpenGL Demo"
CC = gcc
SRCS = ../src/OpenGLDemo.c
OBJS = $(SRCS: .c = .o)
CFLAGS = -Wall -g -c
LIBS = -L./libs -lglfw3 C:/Windows/SysWOW64/opengl32.dll C:/Windows/SysWOW64/glu32.dll

all: opengldemo exe

exe: $(OBJS)
    $(CC) $(OBJS) -o $(EXENAME) $(LIBS)

opengldemo: ../src/OpenGLDemo.c
    $(CC) $(CFLAGS) ../src/OpenGLDemo.c

clean:
    rm -f $(EXENAME)

rebuild: clean all

но, когда я компилирую, он дает эту ошибку, когда пытается построить исполняемый файл:

collect2: error: ld terminated with signal 11 [Segmentation fault], core dumped
makefile:11: recipe for target 'exe' failed
make: *** [exe] Error 1

он создает исполняемый файл, но мой компьютер говорит, что он не может его запустить. Я попытался найти в интернете и нашел ошибку gcc отчеты, включая эту ошибку. Там наверное что-то глупое, что я делаю, чтобы получить эту ошибку. Как исправить эту ошибку и что она означает?

EDIT: полный выход:

make
gcc -Wall -g -c ../src/OpenGLDemo.c
gcc ../src/OpenGLDemo.c -o "OpenGL Demo" -L./libs -lglfw3
C:/Windows/SysWOW64/opengl32.dll C:/Windows/SysWOW64/glu32.dll
cygwin warning:
  MS-DOS style path detected: C:/Windows/SysWOW64/opengl32.dll
  Preferred POSIX equivalent is: /cygdrive/c/Windows/SysWOW64/opengl32.dll
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
collect2: error: ld terminated with signal 11 [Segmentation fault], core dumped
makefile:11: recipe for target 'exe' failed
make: *** [exe] Error 1

2 ответов


Это означает, что ld инструмент или одна из его зависимостей имеет ошибку, которая приводит к недопустимому доступу к памяти (ошибка сегментации), при которой операционная система убивает процесс с помощью SIGSEGV (сигнал 11). Он не должен аварийно завершиться независимо от настройки сборки.

вы, вероятно, следует подать отчет об ошибке ld с вашим поставщиком дистрибутива Linux или непосредственно к поставщику ld tool (обычно GNU в случае вашего с GNU установка binutils).


Я столкнулся с точно такой же ошибкой.

Я разрабатываю Windows и Linux одновременно и использую Filezilla для передачи моих файлов. Код, построенный ранее на Windows с Cygwin, но не после загрузки файлов с моего хоста Linux.

процесс был построен на Windows ==> Загрузить в Linux и построить ==> внести несколько изменений ==> загрузить в Windows и построить ==> получить ошибку.

затем меня осенило, что я передал объект Linux файлы с источником, поэтому я стер все .o файлы, и сборка прошла нормально.

Я не могу сказать, была ли это проблема @Zaerospi или нет, но, похоже, это было источником моей ошибки.

любой другой с той же ошибкой может попытаться удалить свои объектные файлы и перестроить.