近来写个测试代码
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);
}