在没有Main的情况下编译C程序
Compiling a C program without Main
我必须制作一个简单的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文件单独编译成一个对象文件,但它需要与另一个包含主函数的对象文件链接才能成为可执行程序。
如果不允许在此文件中具有主函数,则必须有另一个文件与之链接。
相关文章:
- 如何从测试脚本中运行WAF编译C++程序?
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 在Yocto上本地构建和编译C / C++程序
- 我无法在代码块中编译c ++程序。它给了我错误
- 在 turbo c++ 中使用 TCC 从 cmd 编译C++程序
- 如何在Linux中编译C 程序以生成Windows可执行文件
- 在Python中编译C 程序时,请尝试捕获OS错误
- 在Windows命令提示符中使用G 编译C 程序
- 如何使用HDF5源代码编译c程序
- 如何在Mac终端中编译C ++程序
- 设置 VS 代码以编译C++程序
- 无法在 Ubuntu 上编译 c++ 程序
- 无法使用 libcurl 库编译 c++ 程序
- 编译C 程序,该程序将SFML与MINGW一起到端口,从Linux到Windows
- 编译C 程序时具有逻辑错误,该程序应将任意大的数字表示为字符串
- 如何在 Windows 命令提示符下使用 Dev C++ 编译器编译 c++ 程序
- 在cygwin中使用mingw编译器编译c ++程序时缺少dll。
- 无法在Windows上编写的Linux上编译C程序
- 架构的未定义符号x86_64惠姆使用G 编译C 程序
- 指定netbeans用来编译C++程序的完整编译命令