在没有Main的情况下编译C程序

Compiling a C program without Main

本文关键字:编译 程序 情况下 Main      更新时间:2023-10-16

我必须制作一个简单的C程序(它不能使用主函数)。

因此:

test.c

#include <stdio.h>
int getUserID(int id);
int getUserID(int id) {
    return 0;
}

到目前为止,我的当前功能不起任何作用:然而,我正试图通过makefile来编译它,例如:

all:
    gcc test.c 

这不起作用,因为我没有main,所以我在里面添加了-c命令。

all:
    gcc -c test.c

它现在用make编译,但给了我一个对象文件(但没有工作的可执行文件),即我尝试运行它时得到的可执行程序:i.e ./test tells me permission denied

如有任何帮助,我们将不胜感激。

如果没有main(至少没有邪恶的非标准黑客),就无法拥有C++或C程序。您可以在没有main的情况下构建库,但不能构建独立的可执行文件。

对于独立应用程序,main函数至关重要,因为它定义了从哪里开始执行。

可以创建一个"main"不是入口点的图像。

这里有一种这样的方法(在RHEL6系统上使用gcc):

$ cat sample.c
#include <stdio.h>
#include <unistd.h>
int notmain ( void ) {
        printf("hello, worldn");
        exit(0);
}
$ cc -ffreestanding -c sample.c
$ ld -enotmain -o sample sample.o -I/lib64/ld-linux-x86-64.so.2 -lc
$ ./sample
hello, world

顺便说一句,这不是一个"邪恶的、非标准的破解"——C标准定义了两个执行环境:(1)"托管",这是大多数人熟悉的环境;(2)"独立",这通常是某种嵌入式系统(烤面包机或其他什么)。

您可以将这个c文件单独编译成一个对象文件,但它需要与另一个包含主函数的对象文件链接才能成为可执行程序。

如果不允许在此文件中具有主函数,则必须有另一个文件与之链接。