unpv13e在arm上编译

前言

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

猜你喜欢

转载自blog.csdn.net/nc_linux/article/details/125043113