Arhn - архитектура программирования

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

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

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, включая эту ошибку. Вероятно, я делаю что-то глупое, чтобы получить эту ошибку. Как исправить эту ошибку и что она означает?

РЕДАКТИРОВАТЬ: Полный вывод:

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

  • Можете ли вы показать больше ваших результатов, пожалуйста? 19.08.2014
  • @CarlNorum Это в значительной степени результат. Я добавлю остальное, потому что вы спросили. 19.08.2014
  • make должен, по крайней мере, выводить запущенные команды. 19.08.2014
  • Вы пытались исправить этот путь, о котором он вас предупреждает? 19.08.2014
  • Если какая-либо часть цепочки инструментов (компилятор, компоновщик, make и т. д.) дает сбой, это не вина программиста. Какие бы глупости вы ни делали, инструменты никогда не должны давать сбоев. 19.08.2014
  • @CarlNorum Я боюсь, потому что я компилирую Windows для Windows. 19.08.2014
  • Если я изменю пути, это предупреждение исчезнет, ​​но все равно будет та же ошибка. 19.08.2014

Ответы:


1

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

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

18.08.2014
  • Нет простого решения. Либо начните отлаживать его, либо создайте себе новый ld. Но поскольку вы, кажется, используете cygwin, оба решения могут быть проблематичными. В Linux я бы начал отладку, используя strace -f или valgrind --track-origins=yes --trace-children=yes и тому подобное, но в cygwin это может быть невозможно. Однако вы, вероятно, лучше знакомы с cygwin, чем я. 19.08.2014
  • Я только что получил аналогичную ошибку и могу подтвердить, что это проблема с cygwin. Я скопировал весь проект на настоящую машину с Linux, и все отлично скомпилировалось. 24.02.2015

  • 2

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

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

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

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

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

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

    16.11.2015
  • Отлично спасибо. FWIW, запускающий команду file в файле .o для 32-разрядного cygwin, должен сказать «80386 COFF исполняемый файл не разделен», а для 64-разрядного cygwin должен сказать data. Если они говорят что-то еще, они могут быть случайно производными от Linux. 32-разрядная версия Linux, например: «32-разрядный LSB ELF с возможностью перемещения, Intel 80386, версия 1 (SYSV), не разделенный» и 64-разрядная аналогичны. 03.12.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..