2011-12-17 4 views
3

Вы должны любить ошибки компоновщика * sarcasm *. В любом случае, я разрабатываю psp-игру, используя psp-порт аллегро, который поставляется с pspsdk. И после того, как я исправил все другие неопределенные ссылки, это меня обрушило. Полное сообщение об ошибке и Makefile и код ниже:Неопределенная ссылка на 'main'

Сведения об ошибке

1>------ Build started: Project: PSP Pong, Configuration: Debug Win32 ------ 
1> psp-g++ -I. -IC:/pspsdk/psp/sdk/include -O2 -G0 -Wall -I. -IC:/pspsdk/psp/sdk/include -O2 -G0 -Wall -fno-exceptions -fno-rtti -D_PSP_FW_VERSION=150 -c -o main.o main.cpp 
1> psp-gcc -I. -IC:/pspsdk/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=150 -L. -LC:/pspsdk/psp/sdk/lib main.o -lalleg -lpspgu -lpspirkeyb -lm -lpsppower -lpspaudio -lpsprtc -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -o main.elf 
1> c:/pspsdk/bin/../lib/gcc/psp/4.3.5/../../../../psp/lib/crt0.o: In function `_main': 
1> ../../../../pspsdk/src/startup/crt0.c (86) : undefined reference to `main' 
1> C:\pspsdk\bin\make: *** [main.elf] Error 1 
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== 

Makefile

TARGET = main 
OBJS = main.o 

CFLAGS = -O2 -G0 -Wall 
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti 
ASFLAGS = $(CFLAGS) 

EXTRA_TARGETS = EBOOT.PBP 
PSP_EBOOT_TITLE = PSP Pong 
LIBS = -lalleg -lpspgu -lpspirkeyb -lm -lpsppower -lpspaudio -lpsprtc 
PSPSDK=$(shell psp-config --pspsdk-path) 
include $(PSPSDK)/lib/build.mak 

main.cpp

#include <allegro.h> 
int main() 
{ 

    allegro_init(); 
    install_mouse(); 

    set_color_depth(32); 
    set_gfx_mode(GFX_AUTODETECT,480,272,0,0); 

    clear_bitmap(screen); 
    while (!(mouse_b & 2)) 
    { 
     poll_mouse(); 
     putpixel(screen,mouse_x,mouse_y,0xFFFFFFFF); 
     vsync(); 
    } 
    clear_bitmap(screen); 

    return 0; 
} 
END_OF_MAIN(); 

P.S Я думаю, что компоновщик не говорит о главной функции в main.cpp, но некоторые другие основные, но я не знаю, так что любые советы, исправления, любые вещи, которые помогут мне решить эту проблему, будут оценены.

+2

Что делает 'END_OF_MAIN();' expand to? –

+0

@Ed S. END_OF_MAIN() требуется для всех игр аллегро. Но удаление этого не меняет ошибки компоновщика. –

+0

@sarnold Я пробовал int main (int argc, char * argv []), но он все еще говорит то же самое. Я думаю, что это не главное в main.cpp, но где-то в другом месте, но я понятия не имею. –

ответ

5

Просто перед включением allegro, попробуйте добавить в это определение:

#define ALLEGRO_NO_MAGIC_MAIN 

Источник:

http://allegro-psp.webcindario.com/

+0

Святая мать жемчуга это работает! Благодарю. –

+0

Но что, если я хочу, чтобы мой главный был волшебным? –

+0

@EdS. Затем подключитесь к assert-main –

1

Попробуйте изменить определение main функции для:

extern "C" 
int main(int argc, char * argv[]) 

Смотрите, если это помогает вещи.

2

Заканчивать источник crt0.c Он имеет определение основной, что он может «Из-за имени« магия », которое имеет значение END_OF_MAIN().

http://www.jbox.dk/sanos/source/lib/crt0.c.html

Попробуйте положить

#define ALLEGRO_NO_MAGIC_MAIN в начале вещей.

Смежные вопросы