debian – 如何使用“Unix网络编程书”库编译C代码?
介绍
我开始关注Unix网络编程2003这本书.我已经从官方网站下载了源代码:source code.这包括一个README文件,它告诉你如何构建/编译本书所包含的所有文件. 我按照这个GitHub页面上的说明(也有源代码)github并设法使用make文件并从看起来成功配置源代码. Makefile用于编译提供的示例 程序示例的第一章在下面突出显示的目录中.
(包括所有其他书籍示例程序) include ../Make.defines PROGS = [BOOK]daytimetcpcli.c daytimetcpcli1 daytimetcpcli2 daytimetcpcli3 daytimetcpsrv daytimetcpsrv1 daytimetcpsrv2 daytimetcpsrv3 daytimetcpcliv6 daytimetcpsrvv6 byteorder all: ${PROGS} [BOOK]daytimetcpcli: [BOOK]daytimetcpcli.o ${CC} ${CFLAGS} -o $@ [BOOK]daytimetcpcli.o ${LIBS} daytimetcpcli1: daytimetcpcli1.o ${CC} ${CFLAGS} -o $@ daytimetcpcli1.o ${LIBS} daytimetcpcli2: daytimetcpcli2.o ${CC} ${CFLAGS} -o $@ daytimetcpcli2.o ${LIBS} daytimetcpcli3: daytimetcpcli3.o ${CC} ${CFLAGS} -o $@ daytimetcpcli3.o ${LIBS} daytimetcpsrv: daytimetcpsrv.o ${CC} ${CFLAGS} -o $@ daytimetcpsrv.o ${LIBS} daytimetcpsrv1: daytimetcpsrv1.o ${CC} ${CFLAGS} -o $@ daytimetcpsrv1.o ${LIBS} daytimetcpsrv2: daytimetcpsrv2.o ${CC} ${CFLAGS} -o $@ daytimetcpsrv2.o ${LIBS} daytimetcpsrv3: daytimetcpsrv3.o ${CC} ${CFLAGS} -o $@ daytimetcpsrv3.o ${LIBS} daytimetcpcliv6: daytimetcpcliv6.o ${CC} ${CFLAGS} -o $@ daytimetcpcliv6.o ${LIBS} daytimetcpsrvv6: daytimetcpsrvv6.o ${CC} ${CFLAGS} -o $@ daytimetcpsrvv6.o ${LIBS} byteorder: byteorder.o ${CC} ${CFLAGS} -o $@ byteorder.o ${LIBS} clean: rm -f ${PROGS} ${CLEANFILES} 问题 我把我的文件放在Makefile中.但是,当我再次运行’make’时.这发生了:
我也试过用GCC正常编译:
所以我的问题是如何使用提供的Makefile编译我的程序?我做的正确吗?我知道我可以用GCC编译,但是我不知道包含GCC所需的头文件的语法.这就是我试图用Makefile做的原因. 在我的第二个问题之后,如何在没有makefile的情况下编译? (使用带有正确-I标头的gcc)? gcc program.c -I unp.h? *注意'[BOOK] daytimetcpcli.c’= daytimetcpcli.c在官方网站上提供的源代码中.
首先你在Makefile中的错误:
这意味着所有make目标(PROGS变量的内容)都存在并且比它们的依赖项更新(即必须用于构建它们的内容,IOW源代码). 这对您来说是意料之外的,因为您没有将生成的二进制文件添加到PROGS变量,而是源文件.由于它存在,Make认为它没有更多的事情要做.要更正此问题,请更改: PROGS = [BOOK]daytimetcpcli.c ... 至 PROGS = [BOOK]daytimetcpcli ... 顺便说一句,在文件名中使用[和]之类的特殊shell字符并不是一个好主意,在shell命令中使用该文件时不要忘记转义或引用它们. 现在你在编译命令中的错误:
这意味着你还没有告诉gcc在哪里找到头文件.为什么它会与make一起使用?因为Makefile中的命令包含其他选项:${CFLAGS}和${LIBS},这两个变量在Make.defines中定义(请参阅include行). 你正确的编译命令应该是: gcc -o "[BOOK]daytimetcpcli" -I../lib -g -O2 -D_REENTRANT -Wall ../libunp.a -lpthread "[BOOK]daytimetcpcli.c" (实际上,上面的Makefile中的行只调用链接器,那里不需要CFLAGS;它只在创建编译隐式的.o文件时使用) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |