Gcc 生成文件返回错误
我有一个makefile,它应该编译一组使用Gcc 生成文件返回错误,gcc,makefile,pthreads,Gcc,Makefile,Pthreads,我有一个makefile,它应该编译一组使用库的C文件。虽然makefile在我以前的Linux安装上运行,但我现在无法运行它。有人能帮我吗 CC=gcc CFLAGS=-c -std=c99 LDFLAGS= -lpthread SOURCES=pc_0.c stak.h OBJECTS=$(SOURCES:.c=.o) EXECUTABLE=pcths all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC)
库的C文件。虽然makefile在我以前的Linux安装上运行,但我现在无法运行它。有人能帮我吗
CC=gcc
CFLAGS=-c -std=c99
LDFLAGS= -lpthread
SOURCES=pc_0.c stak.h
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=pcths
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.c.o:
$(CC) $< -o $@ $(CFLAGS)
clean:
rm -f *.o core
但是,如果手动运行以下指令,则会编译源代码:
cc pc_0.c -o pc_0.o -c -std=c99
cc pc_0.o -o pcths -lpthread
不确定它有多重要,但我总是在变量赋值周围添加“”,在尝试调试问题时,发布实际错误消息是最重要的
可能不是您的问题,但我通常将我的编辑器(emacs)设置为使用空格而不是制表符进行缩进,这会导致make出现问题。我必须突出显示all并运行
m-x tabify
来解决问题。将-lpthread
放在命令行末尾的对象文件之后,该文件需要来自libthread的符号。[a | so]
当GNU ld(和其他链接器)解析未定义的引用时,它只在包含所述引用的对象之后的对象文件和库中查找符号定义。您还可以发布它给出的错误吗?
stak.h
的处理看起来是错误的。您是否在两个系统上使用相同版本的gcc?没有错误,这只是猜测,但是否安装了libc dev?不,我猜gcc版本不同
cc pc_0.c -o pc_0.o -c -std=c99
cc pc_0.o -o pcths -lpthread