collect2:错误:ld以信号11终止[分段故障],核心转储

时间:2014-08-18 20:16:57

标签: gcc segmentation-fault cygwin ld

我正在使用GLFW学习OpenGL,并且当时对makefile没有很好的理解。我有OpenGL工作,但我决定更多地学习makefile。经过很多网站,时间和反复试验,我想出了这个:

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

2 个答案:

答案 0 :(得分:7)

我遇到了完全相同的错误。

我在Windows和Linux上同时开发并使用Filezilla传输我的文件。以前在Windows上使用Cygwin构建的代码,但在从我的Linux主机下载文件后不会。

该过程建立在Windows ==>上传到Linux并构建==>做一些改变==>下载到Windows并构建==>得到错误。

然后我突然意识到我已经使用源传输了Linux目标文件,因此我删除了所有.o文件并且构建运行良好。

我不能说这是否是@ Zaerospi的问题,但它似乎是我错误的根源。

其他具有相同错误的人可能想要尝试删除其目标文件并重建。

答案 1 :(得分:3)

这意味着ld工具或其中一个依赖项存在一个错误,导致操作系统使用SIGSEGV(信号11)终止进程的无效内存访问(分段错误)。无论您的构建设置如何,它都不会崩溃。

您应该向您的Linux发行商提供ld的错误报告,或者直接向ld工具的供应商提交错误报告(如果您的ld工具来自{{{1}}工具,则通常是GNU {3}})。