编译没有Main的C程序

时间:2016-01-12 23:35:40

标签: c++ c makefile

我有一个简单的C程序(我不能使用主函数)。

因此:

test.c的

#include <stdio.h>

int getUserID(int id);

int getUserID(int id) {
    return 0;
}

目前我的当前功能无效: 但是,我试图通过makefile编译它,如下:

all:
    gcc test.c 

哪个没有用,因为我没有主要的,所以我在其中添加了-c命令。

all:
    gcc -c test.c

现在使用make编译,但是给了我一个目标文件(但没有可用的可执行文件),我尝试运行它时得到的可执行文件:i.e ./test tells me permission denied

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

如果没有main(至少没有邪恶的,非标准的黑客攻击),你就不能拥有C ++或C程序。您可以构建一个没有main的库,但不能构建一个独立的可执行文件。

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

答案 1 :(得分:2)

可以创建一个图像,其中&#34; main&#34;不是切入点。

这是一种这样的方式(在RHEL6系统上使用gcc):

$ cat sample.c
#include <stdio.h>
#include <unistd.h>

int notmain ( void ) {
        printf("hello, world\n");
        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

而且,BTW,这不是&#34; 邪恶的,非标准的黑客&#34; - C标准定义two execution environments :( 1)&#34;托管&#34;,这是大多数人都熟悉的,以及(2)&#34;独立&#34;,这通常是某种嵌入式系统(烤面包机或其他)。

答案 2 :(得分:1)

您可以将此c文件单独编译为目标文件,但需要将其与包含main函数的另一个目标文件链接,以成为可执行程序。

如果您不允许在此文件中使用主要功能,则必须有另一个文件与您链接。