arm 上でコンパイルされた unpv13e

序文

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 での設定エラー

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 +60size_t``==次のように変更されます。socklen_t

//size_t size;
socklen_t size;

5) リブロートをコンパイルする

cd ../libroute;makeエラーが報告されます。その理由は、4.4BSD ではなく Linux を使用しているためです。同様のことが
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