您的位置:首页 > 其它

gcc 指定入口函数

2014-07-24 17:10 190 查看
近来写个测试代码

int main(int argc,char *argv[])
{
int test_ret=0 ;

test_ret += test_xxx1();

test_ret +=test_xxxx1();

printf("Total: %d functions, %d tests, %d errors\n",function_test, call_test, test_ret);

return(test_ret);

}


结果影响到正常编译了,因为测试代码 的 TEST.C 文件会被 make自动找到,两个 main 函数冲突了

想起ARM 下可以各种方式指定 ENTRY 函数的

网上找了下,gcc 有两种方式 gcc -e entryfunc gcc --Entry=entryfunc 事实上后一种试验时说是过时了

把main改成testmain

int testmain(int argc,char *argv[])
{
int test_ret=0 ;

test_ret += test_xxx1();

test_ret +=test_xxxx1();

printf("Total: %d functions, %d tests, %d errors\n",function_test, call_test, test_ret);

return(test_ret);

}


gcc -o testapp -e testmain *.c

报以下错

(.text+0x18): undefined reference to `main'

collect2: ld returned 1 exit status

原因是gcc 自动链ctrl.o 文件,这个ctrl代码中引用了 main

另加参数 -nostartfiles 忽略之

gcc -o testapp -e -nostartfiles testmain *.c

但执行时testmain返回时报错,是因为返回时少了必要清理代码

修改 testmain 把 return 改成 exit

int testmain(int argc,char *argv[])
{
int test_ret=0 ;

test_ret += test_xxx1();

test_ret +=test_xxxx1();

printf("Total: %d functions, %d tests, %d errors\n",function_test, call_test, test_ret);

exit(test_ret);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: