我正在写一本书:C语言中的TCP / IP套接字及其网站代码。
我正在尝试基于这些文件构建客户端和服务器。我的make给出了很多错误,这些错误与无法从DieWithMessage.c中找到函数有关
这里是:
#include <stdio.h>
#include <stdlib.h>
#include "Practical.h"
void DieWithUserMessage(const char *msg, const char *detail) {
fputs(msg, stderr);
fputs(": ", stderr);
fputs(detail, stderr);
fputc('\n', stderr);
exit(1);
}
void DieWithSystemMessage(const char *msg) {
perror(msg);
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
当我执行gcc DieWithMessage.c时,出现以下错误:
/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/../../../crt1.o:在函数_start':
(.text+0x18): undefined reference tomain'collect2中:ld返回1退出状态
我如何单独编译它,以便在使用makefile时不再发生错误?
谢谢你的帮助。
main如果您要尝试链接/运行它,那么您的C代码需要一个函数。这是标准下托管C应用程序的要求。
该错误消息表明出了什么问题。C运行时/启动代码(CRT)的入口点start用于设置环境,然后调用main。由于您没有提供一个main,它抱怨。
如果您只想生成一个目标文件以用于以后与链接main(请参阅此处以获取该过程的描述),请使用类似以下内容的文件:
gcc -c -o DieWithMessage.o DieWithMessage.c
Run Code Online (Sandbox Code Playgroud)
(-c是“编译但不链接”标志)。然后,您可以使用类似(尽管还有其他选项)的方式将其与主程序链接:
gcc -o myProg myProg.c DieWithMessage.o
Run Code Online (Sandbox Code Playgroud)
如果您希望以后使用真实的占位符 main进行更新,可以在代码中添加以下内容:
int main (void) { return 0; }
Run Code Online (Sandbox Code Playgroud)