我有一个简单的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
非常感谢任何帮助。
答案 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函数的另一个目标文件链接,以成为可执行程序。
如果您不允许在此文件中使用主要功能,则必须有另一个文件与您链接。