• UNIX网络编程 卷2 源代码使用


    1. 下载源码,W. Richard Stevens的主页:http://www.kohala.com/start/
    wget http://www.kohala.com/start/unpv22e/unpv22e.tar.gz -P /usr/local/src 
    2. 解压
    tar xvf /usr/local/src/unpv22e.tar.gz -C /root/bin 
    3. 编译库文件
    cd /root/bin/unpv22e/  
    ./configure 
    编辑生成config.h文件,注释以下几行
    vi config.h  
    56 // #define uint8_t unsigned char  
    57 // #define uint16_t unsigned short  
    58 // #define uint32_t unsigned int  
    添加MSG_R和MSG_W定义
    vi config.h  
    66 // add by jcq  
    67 typedef unsigned long ulong_t;  
    68 #define MSG_R 0400  
    69 #define MSG_W 0200 
    添加_GNU_SOURCE定义
    vi config.h  
    #define _GNU_SOURCE 
    修改warpunix.c中的MKtemp函数,使用mkstemp函数替换mktemp函数
    cd lib  
    181 void  
    182 Mktemp(char *template)  
    183 {  
    184 if (mkstemp(template) == NULL || template[0] == 0)  
    185 err_quit("mktemp error");  
    186 } 
    编译生成libunpipc.a
    cd lib  
    make
     
    将生成的libunpipc.a复制到/usr/lib中。
    [root@localhost myunp2]# vim ftok.c
    [root@localhost myunp2]# gcc -o ftok ftok.c 
    /tmp/ccxRydhw.o: In function `main':
    ftok.c:(.text+0x18): undefined reference to `err_quit'
    ftok.c:(.text+0x30): undefined reference to `Stat'
    ftok.c:(.text+0x48): undefined reference to `Ftok'
    collect2: 错误:ld 返回 1
    [root@localhost myunp2]# gcc -o ftok ftok.c -lunpipc
    /usr/lib/libunpipc.a(wrapunix.o): In function `Mq_open':
    wrapunix.c:(.text+0x4d8): undefined reference to `mq_open'
    wrapunix.c:(.text+0x4f0): undefined reference to `mq_open'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Mq_close':
    wrapunix.c:(.text+0x52b): undefined reference to `mq_close'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Mq_unlink':
    wrapunix.c:(.text+0x55b): undefined reference to `mq_unlink'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Mq_send':
    wrapunix.c:(.text+0x5a3): undefined reference to `mq_send'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Mq_receive':
    wrapunix.c:(.text+0x5e3): undefined reference to `mq_receive'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Mq_notify':
    wrapunix.c:(.text+0x623): undefined reference to `mq_notify'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Mq_getattr':
    wrapunix.c:(.text+0x653): undefined reference to `mq_getattr'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Mq_setattr':
    wrapunix.c:(.text+0x68b): undefined reference to `mq_setattr'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Sem_open':
    wrapunix.c:(.text+0x9c8): undefined reference to `sem_open'
    wrapunix.c:(.text+0x9e0): undefined reference to `sem_open'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Sem_close':
    wrapunix.c:(.text+0xa1b): undefined reference to `sem_close'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Sem_unlink':
    wrapunix.c:(.text+0xa4b): undefined reference to `sem_unlink'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Sem_init':
    wrapunix.c:(.text+0xa8b): undefined reference to `sem_init'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Sem_destroy':
    wrapunix.c:(.text+0xabb): undefined reference to `sem_destroy'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Sem_wait':
    wrapunix.c:(.text+0xaeb): undefined reference to `sem_wait'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Sem_trywait':
    wrapunix.c:(.text+0xb1c): undefined reference to `sem_trywait'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Sem_post':
    wrapunix.c:(.text+0xb5b): undefined reference to `sem_post'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Sem_getvalue':
    wrapunix.c:(.text+0xb93): undefined reference to `sem_getvalue'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Shm_open':
    wrapunix.c:(.text+0xccc): undefined reference to `shm_open'
    /usr/lib/libunpipc.a(wrapunix.o): In function `Shm_unlink':
    wrapunix.c:(.text+0xd0b): undefined reference to `shm_unlink'
    collect2: 错误:ld 返回 1
    [root@localhost myunp2]# gcc -lrt -o ftok ftok.c -lunpipc
    [root@localhost myunp2]# man mq_open
    Cannot open the message catalog "man" for locale "zh_CN.UTF-8"
    (NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N")
    
    Formatting page, please wait...

    出现上面的错误,使用gcc 加选项-lrt解决。

    错误:

    [root@localhost myunp2]# gcc -lrt -o slot slot.c -lunpipc
    slot.c: 在函数‘main’中:
    slot.c:8:22: 错误:‘IPC_PRIVATE’未声明(在此函数内第一次使用)
             msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT);
                          ^
    slot.c:8:22: 附注:每个未声明的标识符在其出现的函数内只报告一次
    In file included from slot.c:1:0:
    unpipc.h:153:21: 错误:‘MSG_R’未声明(在此函数内第一次使用)
     #define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6)
                         ^
    slot.c:8:34: 附注:in expansion of macro ‘SVMSG_MODE’
             msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT);
                                      ^
    unpipc.h:153:29: 错误:‘MSG_W’未声明(在此函数内第一次使用)
     #define SVMSG_MODE (MSG_R | MSG_W | MSG_R>>3 | MSG_R>>6)
                                 ^
    slot.c:8:34: 附注:in expansion of macro ‘SVMSG_MODE’
             msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT);
                                      ^
    slot.c:8:45: 错误:‘IPC_CREAT’未声明(在此函数内第一次使用)
             msqid=Msgget(IPC_PRIVATE,SVMSG_MODE|IPC_CREAT);
                                                 ^
    slot.c:11:22: 错误:‘IPC_RMID’未声明(在此函数内第一次使用)
             Msgctl(msqid,IPC_RMID,NULL);

    解决方法:

    1.unpv22e里面的Make.defines 
    修改 
    #CFLAGS = -g -O2 -D_REENTRANT -Wall 
    CFLAGS = -g -O2 -D_GNU_SOURCE -D__USE_GNU -D_REENTRANT -Wall 

    2 将unpv22e中的unpipc.h拷贝到需要编译的代码的目录。

    3 将config.h也拷贝到这个目录,由于unpipc.h依赖于这个头文件。

  • 相关阅读:
    googlestyleguide
    利用安装光盘创建本地 yum 源补装 RPM 软件包
    串,并联电路的电阻,电流,电压,电功,电功率,电热的分配规律
    链接时如何选择C RunTime(CRT) library
    delphi函数参考手册
    QQ2006 界面编程
    DELPHI6 函数大全
    家庭照明电路设计
    IP地址转换成IP Number并得到国家
    两个或多个开关控制一盏灯的电器接线图
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4531979.html
Copyright © 2020-2023  润新知