加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

debian – 如何使用“Unix网络编程书”库编译C代码?

发布时间:2020-12-15 17:00:21 所属栏目:安全 来源:网络整理
导读:介绍 我开始关注Unix网络编程2003这本书.我已经从官方网站下载了源代码:source code.这包括一个README文件,它告诉你如何构建/编译本书所包含的所有文件. 我按照这个GitHub页面上的说明(也有源代码)github并设法使用make文件并从看起来成功配置源代码. Makef
介绍

我开始关注Unix网络编程2003这本书.我已经从官方网站下载了源代码:source code.这包括一个README文件,它告诉你如何构建/编译本书所包含的所有文件.

我按照这个GitHub页面上的说明(也有源代码)github并设法使用make文件并从看起来成功配置源代码.

Makefile用于编译提供的示例

程序示例的第一章在下面突出显示的目录中.
我的程序是'[BOOK] daytimetcpcli.c’并将其放在提供的Makefile中. Makefile在目标目录中:

unpv13e/intro$

(包括所有其他书籍示例程序)

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’时.这发生了:

make: Nothing to be done for ‘all’.

我也试过用GCC正常编译:

gcc [BOOK]daytimetcpcli.c

fatal error: unp.h: No such file or directory

所以我的问题是如何使用提供的Makefile编译我的程序?我做的正确吗?我知道我可以用GCC编译,但是我不知道包含GCC所需的头文件的语法.这就是我试图用Makefile做的原因.

在我的第二个问题之后,如何在没有makefile的情况下编译? (使用带有正确-I标头的gcc)? gcc program.c -I unp.h?

*注意'[BOOK] daytimetcpcli.c’= daytimetcpcli.c在官方网站上提供的源代码中.

首先你在Makefile中的错误:

make: Nothing to be done for ‘all’.

这意味着所有make目标(PROGS变量的内容)都存在并且比它们的依赖项更新(即必须用于构建它们的内容,IOW源代码).

这对您来说是意料之外的,因为您没有将生成的二进制文件添加到PROGS变量,而是源文件.由于它存在,Make认为它没有更多的事情要做.要更正此问题,请更改:

PROGS = [BOOK]daytimetcpcli.c ...

PROGS = [BOOK]daytimetcpcli ...

顺便说一句,在文件名中使用[和]之类的特殊shell字符并不是一个好主意,在shell命令中使用该文件时不要忘记转义或引用它们.

现在你在编译命令中的错误:

fatal error: unp.h: No such file or directory

这意味着你还没有告诉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文件时使用)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读