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 или нет, но, похоже, это было источником моей ошибки.
любой другой с той же ошибкой может попытаться удалить свои объектные файлы и перестроить.