UNP代码运行

举报
黄生 发表于 2022/09/12 12:39:03 2022/09/12
【摘要】 UNP (UNIX Network Programming)是一本挺老的书,作者也是一位很厉害的人。对于UNP第1卷的第8章UDP编程,练习了一下书中的代码。附带的代码组织的很完整,应该是包含了书中所有的源代码。在CentOS8.5按照README进行配置、编译库、编译一个例子程序并运行,是没有问题的。然后我不要这么多,于是把第8章UDP的代码单独的拿出来进行编译和运行。../iunp/├─...

UNP (UNIX Network Programming)是一本挺老的书,作者也是一位很厉害的人

对于UNP第1卷的第8章UDP编程,练习了一下书中的代码

附带的代码组织的很完整,应该是包含了书中所有的源代码。在CentOS8.5按照README进行配置、编译库、编译一个例子程序并运行,是没有问题的。

然后我不要这么多,于是把第8章UDP的代码单独的拿出来进行编译和运行。

../iunp/
├── config.h
├── tags
└── udp
    ├── dg_cli.c
    ├── dg_echo.c
    ├── error.c
    ├── inet_pton_ipv4.c
    ├── udpcli01.c   这个是客户端程序
    ├── udpserv01.c  这个是服务端程序
    ├── unp.h
    ├── wraplib.c
    ├── wrapsock.c
    └── wrapstdio.c

编译服务端程序:

gcc udpserv01.c wrapsock.c error.c dg_echo.c -o udps

可以看到另外有3个源文件要一起编译
wrapsock.c 这个是包装了socket相关的系统函数,以做错误处理
error.c 这个是错误检查和打印错误的
dg_echo.c 这个是服务端的业务处理

而客户端要这么多一起编译:

cc udpcli01.c dg_cli.c error.c  wrapsock.c wrapstdio.c inet_pton_ipv4.c wraplib.c -o udpc

error.c wrapsock.c 和上面一样
wrapstdio.c 是包装标准IO库,带错误处理的
dg_cli.c inet_pton_ipv4.c wraplib.c 懒得写了

可以看到,这样下去,马上代码管理就要失控,所以还是得向完整的代码组织结构学习。

然后我到HCE2.0上去看看(Huawei Cloud EulerOS release 2.0 (West Lake))

udps:        ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=238f2f238cb9fb78e42d9d81acc1524c82f2a4c3, not stripped
udpsarm:     ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=cd3f6f6d73daa7d59c5c3d5884d4184fe7e95ddf, for GNU/Linux 3.7.0, not stripped

因为硬件架构不同,编译出来的程序是不能直接拿过来运行的:

-bash: ./udps: cannot execute binary file: Exec format error

在配置的过程中,因为make检测脚本太老,会报错:

[root@ecs-hce unpv13e]# ./configure
checking build system type... ./config.guess: unable to guess system type

This script, last modified 2002-03-20, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from

    ftp://ftp.gnu.org/pub/gnu/config/

If the version you run (./config.guess) is already up to date, please
send the following data and any information you think might be
pertinent to <config-patches@gnu.org> in order to provide the needed
information to handle your system.

config.guess timestamp = 2002-03-20

uname -m = aarch64
uname -r = 5.10.0
uname -s = Linux
uname -v = #1 SMP Tue Aug 16 15:17:24 CST 2022

/usr/bin/uname -p = aarch64
/bin/uname -X     =

hostinfo               =
/bin/universe          =
/usr/bin/arch -k       =
/bin/arch              = aarch64
/usr/bin/oslevel       =
/usr/convex/getsysinfo =

UNAME_MACHINE = aarch64
UNAME_RELEASE = 5.10.0
UNAME_SYSTEM  = Linux
UNAME_VERSION = #1 SMP Tue Aug 16 15:17:24 CST 2022
configure: error: cannot guess build type; you must specify one

去这里https://ftp.gnu.org/pub/gnu/config/更新config.guess脚本,重新开始就可以了。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。