意外标记"换行符"附近的语法错误

syntax error near unexpected token `newline'

本文关键字:语法 错误 换行符 意外      更新时间:2023-10-16

使用Makefile编译一些代码后,当我尝试运行它时,我得到了这个:

$ ./libbookgui.a
./libbookgui.a: line 1: syntax error near unexpected token `newline'
./libbookgui.a: line 1: `!<arch>'

Makefile包含以下内容。

INCLUDES = -I"$(FLTK)"
LIBS     = -lstdc++
CXXFLAGS = $(INCLUDES) -Wall -time -O3 -DNDEBUG -Wno-deprecated
LIBFLAGS = 
AR       = ar
.SUFFIXES: .cpp .o
# Create a list of source files.
SOURCES  = $(shell ls *.cpp)
# Create a list of object files from the source file lists.
OBJECTS = ${SOURCES:.cpp=.o}     
# Create a list of targets.
TARGETS = libbookgui.a
# Build all targets by default
all:    $(TARGETS)
%.a: $(OBJECTS)
    $(AR) rcs $@ $(OBJECTS)
# A rule to build .o file out of a .cpp file
%.o: %.cpp 
    $(CXX) $(CXXFLAGS) -o $@ -c $<
# A rule to clean all the intermediates and targets
clean:  
    rm -rf $(TARGETS) $(OBJECTS) *.out *.stackdump

我看到它有TARGETS = libbookgui.a行,编译器不返回任何错误,它只是创建.a文件。

有什么想法吗?

libbookgui.a是一个静态库(聚合其中的多个对象文件)。

您应该运行可执行文件,而不是库。将此库链接到某个可执行文件并运行

我建议你阅读这篇文章。

您需要更新帖子以显示您对 makefile 所做的更改,以添加链接行。 没有这一点,我们无法真正帮助您解决问题的这一部分。

根据错误,我怀疑您没有使用正确的链接工具:您要么使用"gcc"(C 编译器前端),要么尝试直接调用链接器。 链接应用程序时,应使用 C++ 编译器(在您的情况下为 $(CXX) )。 您也不需要指定 -lstdc++ ,因为C++前端会自动将其添加到链接行中。