From Quora:https://www.quora.com/How-can-I-write-a-C-program-without-a-main-function
Question:我如何才能写一个没有主函数的C程序?
Answer From Travis Hance:
你可以编译任何一个C程序,无论有没有主函数,或者是一个对象文件(.o文件)。只有当你把所有对象文件链接起来,去组成一个可执行文件,你才需要主函数。
如果你想更深入的去了解,你学要知道一些平台特性。
例如在Linux上,一个可执行文件的执行是从_start而不是main。_start函数是在libc里执行的。所以如果你让编译去忽略libc,main就没有执行的基础,然后你就不需要它了。但你必须使用_start作为替代。在这个博客里有一个非常实用的指导:
oracle.com
Hello from a libc-free world! (Part 1)
Answer From Sergey Zubkov:
如果你真的想那么做,编译freestanding(一个独立的编译器不需要有main函数)
$ cat test.c #include <unistd.h> #include <string.h> int szstart() { char* msg = "No main here\n"; write(1, msg, strlen(msg)); _exit(0); } $ gcc -O3 -ffreestanding -c -o test.o test.c; ld -s -static -o test test.o -e szstart -lc $ ./test No main here
Answer From Gurudutt Mallapur:
写一个动态或者静态的C库!
你可以把你可以重复实用的C代码写到库里,并且可以把它链接到任何一个有main函数的程序里。你也需要把它链接到一个测试函数里来保证它正确运行。
在Linux里 .so/.a文件分别对应 动态 静态库
- Building
a library : The GNU C Programming Tutorial - Kinds
of libraries : The GNU C Programming Tutorial - YoLinux
Howto : Static, Shared Dynamic and Loadable Linux Libraries - Program
Library HOWTO
在windows里 .dll/.lib 分别对应动态静态库
时间: 2024-10-13 09:33:51