Компилятор Tiny C: неопределенный символ "главный", когда основной? - PullRequest
0 голосов
/ 31 октября 2011

У меня есть основная функция, но когда tcc идет, чтобы связать все вместе, он говорит, что он не определен.Почему это так?

Я использую скрипт сборки Python, и аргументы передаются в виде списков:

['v:/exe/tcc/tcc.exe', '-odist/***.exe', '-Llib/', '-llua5.1', '-lsoil', '-lSDL', '-lopengl32', 'build/luainterface\\msL.o', 'build/luainterface\\vector.o', 'build/rendering\\renderutil.o', 'build/structures\\crtree.o', 'build/structures\\uniqueid.o', 'build/structures\\vector.o', 'build/world\\blocklib.o', 'build/world\\chunk.o', 'build/world\\world.o', 'build/main.o']

Вывод просто:

tcc: undefined symbol 'main'

MyФункция main определена в файле main.c (и не имеет заголовка) с парой статических функций.Основная функция:

int main(int argc, char *argv[])
{
    SDL_Surface* screen = render_initialize(1024,768);

    lua_State* L = luaL_newstate();
    //lua_atpanic(L,&Lpanic);

    msL_registerState(L);
    msL_openAllLibs(L);

    int fail = luaL_dofile(L,"lua/main.luac");
    if(fail)
    {
        fprintf(stderr, "Lua error: %s\n", lua_tostring(L,-1));
        doexit(1);
    }

    lua_getfield(L,LUA_GLOBALSINDEX,"draw");
    if(!lua_isfunction(L,-1))
    {
        lua_pop(L,1);
        fprintf(stderr, "No draw function defined in global scope\n");
        doexit(1);
    }
    lua_setfield(L,LUA_REGISTRYINDEX,"msL_drawfunction");

    while(1)
    {
        lua_getfield(L,LUA_REGISTRYINDEX,"msL_drawfunction");
        assert(lua_isfunction(L,-1));
        int err = lua_pcall(L,0,0,0);
        if(err)
        {
            fprintf(stderr,"Lua error: ");
            switch(err)
            {
                case LUA_ERRRUN:
                    fprintf(stderr,"%s",lua_tostring(L,-1));
                    break;
                case LUA_ERRMEM:
                    fprintf(stderr,"out of memory");
                    break;
                default:
                    fprintf(stderr,"unknown error");
            }
            fprintf(stderr,"\n");
            doexit(1);
        }

        render_flipbuffers(screen);
    }
    doexit(0);
}

РЕДАКТИРОВАТЬ: Я пропустил код через tcc только с предварительной обработкой.Очевидно, что основная функция переименовывается в SDL_main через некоторый макрос в SDL.

1 Ответ

1 голос
/ 31 октября 2011

Добавить -lSDLmain к флагам компоновщика.

http://wiki.libsdl.org/moin.cgi/FAQWindows#I_get_.22Undefined_reference_to_.27WinMain.4016.27.22

Хотя в tcc все может быть немного по-другому.

...