記事ディレクトリ
序文
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 +60
はsize_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) クライアントとサーバーの相互参照リンク
その他のコンパイルエラー
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