我有一个主要功能,但是当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'
我的主要功能是在文件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中的某个宏重命名为SDL_main。
最佳答案
将-lSDLmain
添加到链接器标志。
http://wiki.libsdl.org/moin.cgi/FAQWindows#I_get_.22Undefined_reference_to_.27WinMain.4016.27.22
尽管在tcc中情况可能有所不同。