unpv13e在arm上编译

UNIX环境高级编程、UNIX网络编程(卷一)环境搭建 最近学习这两本书,在直接编译书本源程序时,出现头文件“apue.h”(UNIX环境高级编程)及“unp.h”(UNIX网络编程)错误,在这里坐下配置的笔记。 首先需要安装Linux系统。(在VirtualBox虚拟机里安装Centos6.7的Linux系统) APUE: 1、使用浏览器从http://www.apuebook.com/code3e.html下载源码src.3e.tar.gz( 阅读详情

前言

unpv13e在NVIDIA上编译报错,记录该问题,方便后续移植到其他平台。资源下载链接: UNIX网络编程源码unpv13e


编译

0) 查看README获取如何编译

Execute the following from the src/ directory:

    ./configure    # try to figure out all implementation differences

    cd lib         # build the basic library that all programs need
    make           # use "gmake" everywhere on BSD/OS systems

    cd ../libfree  # continue building the basic library
    make

    cd ../libroute # only if your system supports 4.4BSD style routing sockets
    make           # only if your system supports 4.4BSD style routing sockets

    cd ../libxti   # only if your system supports XTI
    make           # only if your system supports XTI

    cd ../intro    # build and test a basic client program
    make daytimetcpcli
    ./daytimetcpcli 127.0.0.1

If all that works, you're all set to start compiling individual programs.


1)ARM下configure报错

UNAME_MACHINE = aarch64
UNAME_RELEASE = 4.9.140-tegra
UNAME_SYSTEM  = Linux
UNAME_VERSION = #1 SMP PREEMPT Fri Dec 4 11:04:54 CST 2020
configure: error: cannot guess build type; you must specify one

2)使用配置选项即可解决

./configure ==build=arm
编译截取部分,如果是X86下,不需要增加--build=arm选项

root@ubuntu-desktop:/home/ubuntu/socket/unpv13e# ./configure --build=arm
checking build system type... arm-unknown-none
checking host system type... arm-unknown-none
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes


3)编译通用的基本库

cd lib;make

...
r - wrapunix.o
r - write_fd.o
r - writen.o
r - writable_timeo.o
ranlib ../libunp.a

4) 继续编译基础依赖库libfree

报错:

gcc -I../lib -g -O2 -D_REENTRANT -Wall   -c -o inet_ntop.o inet_ntop.c
inet_ntop.c: In function ‘inet_ntop’:
inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype
  size_t size; //@lvc compile failure so edit size_t socklen_t
         ^~~~
In file included from inet_ntop.c:27:0:
/usr/include/arpa/inet.h:64:20: error: prototype declaration
 extern const char *inet_ntop (int __af, const void *__restrict __cp,
                    ^~~~~~~~~
<builtin>: recipe for target 'inet_ntop.o' failed
make: *** [inet_ntop.o] Error 1


报错修改, vim` inet_ntop.c +60,将size_t``==修改为socklen_t

//size_t size;
socklen_t size;

5) 编译libroute

cd ../libroute;make报错,原因为您使用的是linux,非4.4BSD,同理
libxti也一样,需要支持XTI

nproute.h:3:10: fatal error: net/if_dl.h: No such file or directory
 #include <net/if_dl.h>  /* sockaddr_sdl{} */
          ^~~~~~~~~~~~~
compilation terminated.
<builtin>: recipe for target 'get_rtaddrs.o' failed
make: *** [get_rtaddrs.o] Error 1

6)编译测试程序

cd ../intro;make,如果没有报错,会生成比较多的可执行文件(绿色)
在这里插入图片描述

测试

1)启动服务端

开启一个终端,进入到intro目录中,执行如下:

# cd unpv13e绝对目录/intro
# ./daytimetcpsrv

2)启动客户端

如果在同一shell环境下,即在同一台host上
cd unpv13e/绝对目录
./daytimetcpcli 127.0.0.1

3) 客户端和服务端交互参考链接

tcpdump基本使用和实战分析

其他编译错误

1)编译tcpcliserv中的Makefile报错

tcpservpoll01.c:13:24: error: ‘OPEN_MAX’ undeclared (first use in this function); did you mean ‘FOPEN_MAX’?
  struct pollfd  client[OPEN_MAX];

搜unp项目代码没有定义, 在/usr/include下也没有找到,可能是因为内核修改踢出了该定义,解决方法是在unpv13e/Make.define文件第12修改如下:

CFLAGS = -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024

编译可通过:

root@ubuntu:/opt/socket/unpv13e/tcpcliserv# make clean;make -j4
rm -f tcpcli01 tcpcli04 tcpcli05 tcpcli06 tcpcli07 tcpcli08 tcpcli09 tcpcli10 tcpserv01 tcpserv02 tcpserv03 tcpserv04 tcpserv08 tcpserv09 tcpservselect01 tcpservpoll01 tsigpipe core core.* *.core *.o temp.* *.out typescript* *.lc *.lh *.bsdi *.sparc *.uw
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpcli01.o tcpcli01.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpcli04.o tcpcli04.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpcli05.o tcpcli05.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpcli06.o tcpcli06.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpcli07.o tcpcli07.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpcli08.o tcpcli08.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o str_cli08.o str_cli08.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpcli09.o tcpcli09.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o str_cli09.o str_cli09.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpcli10.o tcpcli10.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpserv01.o tcpserv01.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpserv02.o tcpserv02.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o sigchldwait.o sigchldwait.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpserv03.o tcpserv03.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpserv04.o tcpserv04.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o sigchldwaitpid.o sigchldwaitpid.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpserv08.o tcpserv08.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o str_echo08.o str_echo08.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpserv09.o tcpserv09.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o str_echo09.o str_echo09.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpservselect01.o tcpservselect01.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tcpservpoll01.o tcpservpoll01.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024   -c -o tsigpipe.o tsigpipe.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpcli01 tcpcli01.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpcli04 tcpcli04.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpcli05 tcpcli05.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpcli06 tcpcli06.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpcli07 tcpcli07.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpcli08 tcpcli08.o str_cli08.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpcli09 tcpcli09.o str_cli09.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpcli10 tcpcli10.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpserv01 tcpserv01.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpserv02 tcpserv02.o sigchldwait.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpserv03 tcpserv03.o sigchldwait.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpserv04 tcpserv04.o sigchldwaitpid.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpserv08 tcpserv08.o str_echo08.o sigchldwaitpid.o \
		../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpserv09 tcpserv09.o str_echo09.o sigchldwaitpid.o \
		../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpservselect01 tcpservselect01.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tcpservpoll01 tcpservpoll01.o ../libunp.a -lpthread
gcc -I../lib -g -O2 -D_REENTRANT -Wall -DOPEN_MAX=1024 -o tsigpipe tsigpipe.o ../libunp.a -lpthread

Unix网络编程(卷二)源码编译报错解决 源码下载地点:http://www.kohala.com/start/unpv22e/unpv22e.html1、按照Readme操作,进入lib目录下make报错:gcc -g -O2 -D_REENTRANT -Wall -D_POSIX_PTHREAD_SEMANTICS   -c -o daemon_inetd.o daemon_inetd.cIn file included from /usr/include/netinet/in.h:24,                 from /usr/i 阅读详情

相关推荐

unpv 网络编程.pdf+源码 linux unix

unpv 网络编程.pdf+源码 linux unix

unix 网络编程 unpv13e 实验环境问题 - 测试套接字超时 - advio

测试套接字超时 编译的时候遇到的问题: gcc -o connect_timeo connect_timeo.c -lunp /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libunp.a(signal.o): In function `Signal': /root/unpv13e/lib/signal.c:29: multiple definition of `Signal' /tmp/cc5G0CbF.o:connect_ti.

yzx19的博客 2432

unpv13e:UNIX网络编程第三版

unpv13e:UNIX网络编程第三版源码

UNIX网络编程:unpv13e编译错误:net/if_dl.h:没有那个文件或目录

在安装unpv13e的时候遇到问题问题$ cd ../libroute/ $ make gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o get_rtaddrs.o get_rtaddrs.c In file included from get_rtaddrs.c:1:0: unproute.h:3:45: 致命错误:net/if_dl.h:没有...

RToax 5441

CNN经典网络模型(二):AlexNet简介及代码实现(PyTorch超详细注释版)

CNN经典网络模型之一:AlexNet,本文包含其简介及代码,在PyTorch中实现,进行超详细注释,适合新生小白阅读学习~

qq_43307074的博客 2万+

红外通信不止遥控器:手把手教你用2ASK调制实现语音+温度数据同传

本文详细介绍了如何利用2ASK调制技术实现红外通信系统,同时传输语音和温度数据。通过STM32F103C8T6微控制器和DS18B20温度传感器的硬件设计,结合2ASK调制原理,展示了系统的完整实现方案。文章还提供了调试优化建议,适合电子爱好者和通信工程学生实践学习。

weixin_42531588的博客 388

推荐开源项目:unpv13e - 理解Unix网络编程的宝典

是一本专注于Unix平台上的网络编程的开源书籍,基于已故的著名计算机科学家W. Richard Stevens的经典著作《Unix网络编程》(Volume 1: Socket API)的第13版。该项目旨在提供一个自由、开放的学习资源,帮助开发者深入理解网络编程的核心原理和实践技巧。 ## 技术分析 本书覆盖了网络编程的基础到高级主题,包括: - **套接字基础**:详细讲解了套接字API的...

gitblog_00078的博客 414

XVF3800麦克风阵列实战:从选型到快速原型搭建

本文详细介绍了XVF3800麦克风阵列的选型与快速原型搭建实战经验。从开箱即用的特性到波束成形、回声消除等核心功能拆解,再到硬件设计避坑指南和固件开发技巧,帮助开发者高效实现智能语音设备的开发。特别适合智能音箱、会议终端等需要远场拾音和声源定位的应用场景。

weixin_29161719的博客 273

运行unp书上第一个例子

1.下载unpv13e.tar.gz 网上有很多资源。下载好解压到linux目录下 2.打开readme。按照步骤操作 执行第一步cd lib make时,有如下错误  vim inet_ntop.c 定位到第60行,size_t 变为socklen_t类型 其他博主还遇到一些错误,但我只遇到这一个错误,警告不用管 3.将生成的静态链接库linump.a复制到usr/lib和usr/l...

weixin_43430640的博客 455

串口接收完整一帧数据包的3种方法

本文介绍3种使用串口接受一帧完整数据包的方法,串口接收数据是字节接收的,串口每接收1字节数据,产生一个串口中断,我们在中断中将接收到的数据存放到buf中进行保存,但是数据的发送和接收都是按照帧为单位进行传输的,因此我们要在接收数据的同时判断当前接收的数据是否是完整的一帧。 一般串口完整数据帧的定义:帧头(2字节,例如AA、BB) + 数据长度(2字节) + 数据+ CRC16校验(2字节) + 帧尾(2字节) 帧头、帧尾表示一帧数据的开始和结尾,数据长度表示当前数据帧中负载数据大小,CRC16校...

爱吃鱼的猫 6万+

Xilinx Vitis 2020.1中Microblaze SREC SPI Bootloader初始化失败的调试与修复指南

本文详细解析了在Xilinx Vitis 2020.1开发环境中,Microblaze SREC SPI Bootloader初始化失败的常见原因与解决方案。核心问题通常源于Flash上电时序或软件配置,如`serial_flash_family`参数未生效、链接脚本设置不当或BRAM初始化文件选择错误。文章提供了从硬件配置检查、工程设置修正到代码级添加重试机制的完整调试路径,帮助开发者快速定位并修复启动故障,确保系统稳定启动。

weixin_29163857的博客 186

在linux中使用 ./configure 时报错

解决办法:使用自带glib,添加参数。解决办法:指定编译平台。

thing 3118

跟着团子学SAP CO:基于成本的完工百分比结算:Cost-based POC(以项目为例)

本文以英国及北美会计准则下的基于成本的POC的销售型项目结算对PS模块中的完工百分比进行介绍

Lucas1211的博客 2万+

UNP v1 第一章:简介

UNIX网络编程卷一:套接字联网API笔记,第一章简介,主要内容为一个时间获取软件客户端与服务器端。

Ghosind 725

2025年华为杯D题:低空湍流监测及最优航路规划思路与Matlab实现

2025年华为杯D题:低空湍流监测及最优航路规划思路与Matlab实现

前程算法屋的博客 772

MIKE水动力笔记5_建立水动力模型

前文已经讲了如何制作网格文件(.mdf文件),这一博文就讲如何建立水动力模型。

晏长街的博客 3万+

unp 源码引用步骤(centos8)

0、参考README步骤 1.下载unpv13e,解压,运行命令./configure 2.编译(可能需要安装make) 3、处理第二步编译时出现的类型不一致的问题 (1)异常现象截图 (2)处理,修改,然后重新编译 inet_ntop.c中的inet_ntop函数中size的类型,inet_ntop 4、进入libroute编译,出错(暂时不用理会) 5、后续处理 (1)拷贝 (2)修改/usr/include/unp.h中两行代码

wobenqinren的博客 272

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

终极指南:使用Download Full Installer轻松获取macOS完整安装包

还在为获取macOS完整安装包而烦恼吗?Download Full Installer为您提供了最简单直接的解决方案!这款基于SwiftUI开发的应用程序让您轻松下载macOS Big Sur及以上版本的完整安装包,彻底告别复杂的命令行操作,让系统部署变得前所未有的简单。无论您是IT管理员、开发者还是普通Mac用户,这款工具都能让macOS安装包管理变得像点击按钮一样简单。 ## 🎯 为什么你

gitblog_01055的博客 336

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Linux UnixODBC安装配置

资源紧张的时候,服务器是大家共用的,上面部署了一堆服务。因为最终,我们是使用 golang 进行开发的。原来是我在疯狂的改环境的时候,无意间造成了破坏。路径为:/home/dmdba/dmdbms/bin/可以成功连接DB,并能执行测试语句,说明 UnixODBC 配置成功。这里路径和之前不一致是因为,为了保证可行性,先在Linux上做了适配。说明:像镜像仓库中提交该镜像,以后用的时候,直接拉取即可。必须得是达梦的,不能是UnixODBC自己生成的。幸好是在 Docker 里,没有对他人造成影响。

LuckyTHP 2817

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ARM平台交叉编译jshon

其中/home/kobe/gcc/arm/gcc-x86_64_arm-xxxx-gnueabihf/bin/是交叉编译工具目录,具体路径根据自己实际情况设置。因为交叉编译,因此需要把工具链的安装路径添加到$PATH中,这样保证编译工具能被找到。编译jshon,需要提前编一个jansson库,他是jshon依赖的。如果上面你基本都试过了,那么你很快也就编译出来了。jshon的二进制文件就是最终编译结果。先总结一下,编译时候遇到的问题。还有类是下面的命令都是错误的。

mudawei1的博客 1860

ARM系统装RXTX串口

将输入的复制到 vim /usr/include/linux/version.h ,如下。将 #include 改成 #includerxtx-2.2pre2.zip 结尾带bin的是已经编译完成直接使用的。

qq_34343623的博客 922

unp 第一、二章

apue是在太无聊了。。。。我只能转unp,缓解一下 所以什么叫协议栈 局域网 LAN(Local Area Network) 广域网 WAN(Wide Area Network),最大的广域网是Internet tar --help | head -n 10 返回输出的前10行: head -n 10,最后10行 tail -n 10 解压zip文件 unzip 要解压的文件 -d 你的目录 环境配置参考:UNP学习第一步:unp.h的安装及第一个程序的运行_Owen .

newbaby2012的专栏 414

checking host system type... Invalid configuration `arm-none-linux-guneabi'解决办法

原因:config.sub版本太旧解决方法:从libtool获取config.sub    1. 安装libtool ,sudo apt-get install libtool    2. 拷贝 /usr/share/libtool/config/config.sub 到需要 执行./configure的路径下...

BHJ1119的专栏 6734

log4cpp arm环境 直接编译/交叉编译

1. build ./configure --build=arm make make check make install2. use log4cpp 2.1 makefile CC=g++ all: $(CC) main.cpp -I /usr/local/include -L /usr/local/lib -llog4cpp -o main clean: rm -f *.o main

songpeng26的博客 1828

arm linux环境搭建及用法

先从该网址下载arm-linux-tool-20061213.tar.gz http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/ 下完后,解压到相应位置(解压后会出现一个/usr目录),然后移动到根目录下的/usr的对应位置。 在终端运行arm-linux-gcc -v 看是否成功. dsfffdso@sdffdsfo-desktop:

benico的专栏 776

Ubuntu 9.10上建立ARM-Linux交叉编译环境

一、序言学习ARM嵌入式的人都知道,要想使PC上的程序运行在ARM板,必须建立交叉编译环境来对源代码进行编译。对于交叉编译环境的基本概念这里就不多说了,网上多得是。这里主要是写我在建立交叉编译环境时的方法步骤和一些想法。我的建立过程经历了疯狂的四天。在这四天里,我除了睡觉,吃饭,上厕所,几乎所有的时间都坐在电脑面前,只是为了最后那100多MB的文件。我终于体会到了在面对复杂的问题时的那种无助的心情。也终于知道了想当一名自由软件支持者所要具备的能力与心态(那就是怎样在困难与错误面前寻找解决办法)。学习嵌入式L

zchli的专栏 1298
上一篇: muduo编程示例之五个简单TCP示例
下一篇: UNIX网络编程之基础
帘下有白绿
博客等级 码龄12年 165粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值