UNP代码运行
【摘要】 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)