Undefined references November 03, 2010 07:21PM | Registered: 13 years ago Posts: 12 |
> "make" main.cpp linking ... yosdemo.elf main.o: In function `levelManager::update()': e:/yosdemo/source/lvl/level_manager.cpp:17: undefined reference to `mapLevel::draw()' main.o: In function `__static_initialization_and_destruction_0': e:/yosdemo/source/lvl/level_manager.cpp:4: undefined reference to `mapLevel::~mapLevel()' e:/yosdemo/source/lvl/level_manager.cpp:4: undefined reference to `mapLevel::mapLevel()' collect2: ld returned 1 exit status make[1]: *** [/e/yosdemo/yosdemo.elf] Error 1 "make": *** [build] Error 2 > Process Exit Code: 2 > Time Taken: 00:11
#include "level_manager.h" #include "level.h" mapLevel Level; levelManager::levelManager() { } levelManager::~levelManager() { } void levelManager::update() { Level.draw(); };
#ifndef __LEVEL_MANAGER_H__ #define __LEVEL_MANAGER_H__ class levelManager { public: levelManager(); ~levelManager(); void update(); //bool draw(); }; #endif
#include "../redblock.h" #include "../camera.h" #include "level.h" #include "map.h" #define tilew (16) #define tileh (16) GRRLIB_texImg * block; mapLevel::mapLevel() { block = GRRLIB_LoadTexture(spr_redblock); mapw=32; maph=15; } mapLevel::~mapLevel() { } void mapLevel::start() { block = GRRLIB_LoadTexture(spr_redblock); mapw=32; maph=15; } bool mapLevel::draw() { for (x=0; x<=mapw; x++) { for (y=0; y<=maph; y++) { if (testlevel_map0[y][x]!=0) { GRRLIB_DrawImg(x*tilew+camx, y*tileh, block, 0, 1, 1, 0xFFFFFFFF); } } } return true; };
#ifndef __LEVEL_H__ #define __LEVEL_H__ class mapLevel { public: mapLevel(); ~mapLevel(); void start(); bool draw(); int x, y; int tilew, tileh; int mapw, maph; }; #endif
#--------------------------------------------------------------------------------- # Clear the implicit built in rules #--------------------------------------------------------------------------------- .SUFFIXES: #--------------------------------------------------------------------------------- ifeq ($(strip $(DEVKITPPC)),) $(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC) endif include $(DEVKITPPC)/wii_rules #--------------------------------------------------------------------------------- # TARGET is the name of the output # BUILD is the directory where object files & intermediate files will be placed # SOURCES is a list of directories containing source code # INCLUDES is a list of directories containing extra header files #--------------------------------------------------------------------------------- TARGET := $(notdir $(CURDIR)) BUILD := build SOURCES := source DATA := data INCLUDES := #--------------------------------------------------------------------------------- # options for code generation #--------------------------------------------------------------------------------- CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) CXXFLAGS = $(CFLAGS) LDFLAGS = -g $(MACHDEP) -mrvl -Wl,-Map,$(notdir $@).map #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- LIBS := -lgrrlib -lfreetype -lpngu -lpng -ljpeg -lz -lfat LIBS += -lwiiuse LIBS += -lmodplay -lasnd LIBS += -lbte -logc -lm #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing # include and lib #--------------------------------------------------------------------------------- LIBDIRS := $(CURDIR) #--------------------------------------------------------------------------------- # no real need to edit anything past this point unless you need to add additional # rules for different file extensions #--------------------------------------------------------------------------------- ifneq ($(BUILD),$(notdir $(CURDIR))) #--------------------------------------------------------------------------------- export OUTPUT := $(CURDIR)/$(TARGET) export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ $(foreach dir,$(DATA),$(CURDIR)/$(dir)) export DEPSDIR := $(CURDIR)/$(BUILD) #--------------------------------------------------------------------------------- # automatically build a list of object files for our project #--------------------------------------------------------------------------------- CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) #--------------------------------------------------------------------------------- # use CXX for linking C++ projects, CC for standard C #--------------------------------------------------------------------------------- ifeq ($(strip $(CPPFILES)),) export LD := $(CC) else export LD := $(CXX) endif export OFILES := $(addsuffix .o,$(BINFILES)) \ $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ $(sFILES:.s=.o) $(SFILES:.S=.o) #--------------------------------------------------------------------------------- # build a list of include paths #--------------------------------------------------------------------------------- export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ -I$(CURDIR)/$(BUILD) \ -I$(LIBOGC_INC) #--------------------------------------------------------------------------------- # build a list of library paths #--------------------------------------------------------------------------------- export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ -L$(LIBOGC_LIB) export OUTPUT := $(CURDIR)/$(TARGET) .PHONY: $(BUILD) clean #--------------------------------------------------------------------------------- $(BUILD): @[ -d $@ ] || mkdir -p $@ @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile #--------------------------------------------------------------------------------- clean: @echo clean ... @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol #--------------------------------------------------------------------------------- run: psoload $(TARGET).dol #--------------------------------------------------------------------------------- reload: psoload -r $(TARGET).dol #--------------------------------------------------------------------------------- else DEPENDS := $(OFILES:.o=.d) #--------------------------------------------------------------------------------- # main targets #--------------------------------------------------------------------------------- $(OUTPUT).dol: $(OUTPUT).elf $(OUTPUT).elf: $(OFILES) #--------------------------------------------------------------------------------- # This rule links in binary data with the .jpg extension #--------------------------------------------------------------------------------- %.jpg.o : %.jpg #--------------------------------------------------------------------------------- @echo $(notdir $<) $(bin2o) #--------------------------------------------------------------------------------- %.png.o : %.png #--------------------------------------------------------------------------------- @echo $(notdir $<) $(bin2o) %.bin.o : %.bin #--------------------------------------------------------------------------------- @echo $(notdir $<) $(bin2o) -include $(DEPENDS) #--------------------------------------------------------------------------------- endif #---------------------------------------------------------------------------------
Re: Undefined references November 03, 2010 10:41PM | Registered: 13 years ago Posts: 21 |
Re: Undefined references November 03, 2010 11:56PM | Registered: 15 years ago Posts: 62 |
Re: Undefined references November 04, 2010 10:07AM | Registered: 14 years ago Posts: 379 |
Don't reply if you don't understand the error at all. This has nothing to do with libogc.Quote
LaserFlash
Try updating to the latest libogc and see if that works.
Re: Undefined references November 04, 2010 04:16PM | Admin Registered: 15 years ago Posts: 5,132 |
Re: Undefined references November 04, 2010 04:30PM | Registered: 14 years ago Posts: 379 |
I think you wanted to say "global variable BAD", move that one to the LevelManager class?Quote
Arikado
Edit: Just realized "Level" is in the levelManager.cpp file. Still though, thats bad practice to use it like that. I cant even imagine all the scoping problems that's going to give you. Move it into your levelManager class.
Re: Undefined references November 04, 2010 10:53PM | Registered: 13 years ago Posts: 12 |
Re: Undefined references November 04, 2010 11:25PM | Registered: 14 years ago Posts: 379 |
> "make" main.cpp linking ... yosdemo.elfOnly shows that it compiles main.cpp, and not any other cpp file, while you say you have more files.
SOURCES := source source/subdircontaininglevelcpp
Re: Undefined references November 05, 2010 01:16AM | Registered: 15 years ago Posts: 30 |
Re: Undefined references November 05, 2010 03:18PM | Admin Registered: 15 years ago Posts: 5,132 |
Re: Undefined references November 05, 2010 03:54PM | Registered: 14 years ago Posts: 379 |
But wouldn't that still cause the level.cpp be included in the link, and thus resolving these undefined references? As the level.cpp is fine on its own.Quote
Arikado
Daid:
Thats not necessarily the case. I believe what he did was make his project, change main.cpp, and then make his project again causing only main.cpp to be compiled again because it was changed. I can back my theory up by pointing out that his other files have errors in the linking stage thus they must have passed the compiling stage previous to him posting the log here. Still though, I agree, I'd like to see the output from a make clean anyway.
Re: Undefined references November 05, 2010 09:29PM | Registered: 13 years ago Posts: 12 |