我正在使用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
答案 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}})。