2016-02-28 68 views
-2

我目前正在回到C++。我一直在遇到构建我的应用程序的问题。 当我运行make输出变为:我的C++应用程序无法链接,我不知道为什么

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 

我的项目

  • 的Makefile
  • Main.cpp的文件结构
  • GameLoop.cpp
  • Debug.cpp
  • 头文件/
    • Main.h
    • GameLoop.h
    • Debug.h

的Makefile:

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 [email protected] 


$(TARGET): $(OBJECTS) 
     $(CC) $(CFLAGS) $(CPPFLAGS) -o [email protected] $^ 
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 [email protected] 


$(TARGET): $(OBJECTS) 
     $(CC) $(CFLAGS) $(CPPFLAGS) -o [email protected] $^ 

目前一直在寻找在这个页面上超过60个答案(及其他)没有运气。 :/

回答

2

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

-c    Compile and assemble, but do not link 

你最后g++通话不应该有-c选项。你有它的原因是因为你已经指定它为您的所有CFLAGS

CFLAGS := -c -Wall -I headers/ 

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

+0

我的天,我有时候很愚蠢。谢谢xD – Member1221

1

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

从Man页面,G ++:

-c    编译或汇编源文件,但不链接。链接阶段根本没有完成。最终的输出是以每个源文件的目标文件的形式。

相关问题