我的c ++应用程序无法链接,我不知道为什么

时间:2016-02-28 12:10:11

标签: c++ makefile g++ sdl gnu-make

我目前正在回到c ++。我在构建应用程序时遇到了问题。 当我运行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

我项目的文件结构

  • 生成文件
  • 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 $@


$(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个答案而没有运气。 :/

2 个答案:

答案 0 :(得分:2)

您的所有@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); Button button = (Button)findViewById(R.id.your_button_id); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new DetectAmplitude().execute(new Void[]{}); } }); } 来电均使用g++选项。来自海湾合作委员会的帮助:

-c

您上一次 -c Compile and assemble, but do not link 来电不应该有g++选项。您拥有它的原因是因为您已为所有-c指定了它:

CFLAGS

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

答案 1 :(得分:1)

从您创建可执行文件的最后一行中删除WRITE_SECURE_SETTINGS标志。

来自man页面的g ++:

  

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