【问题标题】:Undefined reference to 'main'未定义对“主要”的引用
【发布时间】:2011-12-17 00:03:26
【问题描述】:

你必须喜欢链接器错误*讽刺*。无论如何,我正在使用 pspsdk 附带的 allegro 的 psp 端口开发 psp 游戏。在我修复了所有其他未定义的引用之后,这让我很难过。完整的错误信息和makefile和代码如下:

错误详情

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 ==========

制作文件

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

ma​​in.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 中的主要功能,而是在谈论其他主要功能,但我不知道,所以任何建议、更正、任何可以帮助我解决这个问题的东西都将不胜感激。

【问题讨论】:

  • END_OF_MAIN(); 扩展为什么?
  • @Ed S. END_OF_MAIN() 是所有 allegro 游戏所必需的。但删除它不会改变链接器错误。
  • @sarnold 我试过 int main(int argc, char* argv[]) 但它仍然说同样的话。我认为它不是 main.cpp 中的主要内容,而是其他地方,但我不知道。
  • crt0.c 是 c 运行时入口点。
  • 相信你需要-lalleg-main

标签: c++ makefile linker-errors allegro


【解决方案1】:

在包含allegro 之前,尝试添加此定义:

#define ALLEGRO_NO_MAGIC_MAIN

来源:

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

【讨论】:

  • @EdS。然后链接到 alleg-main
【解决方案2】:

查看crt0.c的来源 它有一个 main 的定义,因为 END_OF_MAIN() 所做的名称修改了“魔术”,所以它看不到。

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

试试看

#define ALLEGRO_NO_MAGIC_MAIN 在事情的开始。

【讨论】:

    【解决方案3】:

    尝试将您的 main 函数定义更改为:

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

    看看这是否有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      相关资源
      最近更新 更多