我的 C++ 应用程序无法 link,我不知道为什么

My c++ application fails to link, and i don't know why

我目前正在重新学习 C++。我在构建我的应用程序时遇到了问题 运行。 当 i 运行 make 输出变为:

g++ -c -Wall -I headers/ -I ../libs/inc/SDL2 -L ../libs/lib/SDL2 -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL2 -lGL -lSDL2 -lSDL2main Debug.cpp -o Debug.o
g++ -c -Wall -I headers/ -I ../libs/inc/SDL2 -L ../libs/lib/SDL2 -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL2 -lGL -lSDL2 -lSDL2main GameLoop.cpp -o GameLoop.o
g++ -c -Wall -I headers/ -I ../libs/inc/SDL2 -L ../libs/lib/SDL2 -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL2 -lGL -lSDL2 -lSDL2main Main.cpp -o Main.o
g++ -c -Wall -I headers/ -I ../libs/inc/SDL2 -L ../libs/lib/SDL2 -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL2 -lGL -lSDL2 -lSDL2main -o GAME Debug.o GameLoop.o Main.o
g++: warning: Debug.o: linker input file unused because linking not done
g++: warning: GameLoop.o: linker input file unused because linking not done
g++: warning: Main.o: linker input file unused because linking not done

我的项目的文件结构

生成文件:

CC := g++
TARGET := GAME
SOURCES := $(wildcard *.cpp)
OBJECTS := $(patsubst %.cpp, %.o, $(SOURCES))
DEPS := $(wildcard headers/*.h)
CPPFLAGS := -I ../libs/inc/SDL2 -L ../libs/lib/SDL2 $(shell sdl2-config --libs) -lGL -lSDL2 -lSDL2main
CFLAGS := -c -Wall -I headers/

##$(info OBJECTS= $(OBJECTS) :: SOURCES= $(SOURCES) :: EXECUTABLEOUT= $(TARGET))

default: $(TARGET)

%.o: %.cpp $(DEPS)
        $(CC) $(CFLAGS) $(CPPFLAGS) $< -c -o $@


$(TARGET): $(OBJECTS)
        $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^
RAW Paste Data

CC := g++
TARGET := GAME
SOURCES := $(wildcard *.cpp)
OBJECTS := $(patsubst %.cpp, %.o, $(SOURCES))
DEPS := $(wildcard headers/*.h)
CPPFLAGS := -I ../libs/inc/SDL2 -L ../libs/lib/SDL2 $(shell sdl2-config --libs) -lGL -lSDL2 -lSDL2main
CFLAGS := -c -Wall -I headers/

##$(info OBJECTS= $(OBJECTS) :: SOURCES= $(SOURCES) :: EXECUTABLEOUT= $(TARGET))

default: $(TARGET)

%.o: %.cpp $(DEPS)
        $(CC) $(CFLAGS) $(CPPFLAGS) $< -c -o $@


$(TARGET): $(OBJECTS)
        $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^

目前正在查看此页面(和其他页面)上的 60 多个答案,但没有成功。 :/

您所有的 g++ 调用都使用 -c 选项。来自 GCC 的帮助:

 -c             Compile and assemble, but do not link

你最后一次 g++ 调用不应该有 -c 选项。你拥有它的原因是因为你已经为你所有的 CFLAGS:

指定了它
CFLAGS := -c -Wall -I headers/

从那里删除它应该可以解决您的问题。

从生成可执行文件的最后一行删除 -c 标志。

来自 g++ 的手册页:

-c   Compile or assemble the source files, but do not link. The linking stage simply is not done. The ultimate output is in the form of an object file for each source file.