zoukankan      html  css  js  c++  java
  • Linux下配置APUE的编译 报错之后如何处理

    APUE即Unix环境高级编程,本书中几乎所有的程序都包含一个apue.h的头文件,那如何配置这个apue.h呢?

    官方地址:http://www.apuebook.com/apue3e.html

    1、我们可以在src.3e.tar中下载,然后放到你的Linux桌面上(没桌面的,随意放吧)

    2、解压下载的文件:

    tar -zxvf src.3e.tar.gz

    3、进入解压后的目录:

    cd apue.3e/

    4、编译:

    make

    以下是我用centos 32 6.5   make 最新版第三版的错误:

    [u1@h1 apue.3e]$ make
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE   -c -o rwlock.o rwlock.c
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  timedlock.c -o timedlock  -L../lib -lapue -pthread -lrt -lbsd
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  barrier.c -o barrier  -L../lib -lapue -pthread -lrt -lbsd
    /tmp/ccb9gvom.o: In function `thr_fn’:
    barrier.c:(.text+0x6e): undefined reference to `heapsort’
    collect2: ld 返回 1
    make[1]: *** [barrier] 错误 1
    make[1]: Leaving directory `/home/albert/Documents/progs/apue.3e/threads’
    make: *** [all] 错误 1
    [u1@h1 apue.3e]$
    解决的方法:
    1)ubuntu
    sudo apt-get install libbsd-dev
    2) fedora, redhat, centos
    2.1) 下载两个包
    2.1a) i386
    wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/i386/libbsd-0.6.0-1.el6.i686.rpm
    wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/i386/libbsd-devel-0.6.0-1.el6.i686.rpm
    2.1b) x86_64
    wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/x86_64/libbsd-0.6.0-1.el6.x86_64.rpm
    wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/x86_64/libbsd-devel-0.6.0-1.el6.x86_64.rpm

    2.2)安装如上包,注意命令顺序,需要root权限
    2.2a) i386
    yum install libbsd-0.6.0-1.el6.i686.rpm
    yum install libbsd-devel-0.6.0-1.el6.i686.rpm
    2.2b) x86_64
    yum install libbsd-0.6.0-1.el6.x86_64.rpm
    yum install libbsd-devel-0.6.0-1.el6.x86_64.rpm2.3)然后继续编译apue
    [u1@h1 apue.3e]$make
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE   -c -o asyncsocket.o asyncsocket.c
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE   -c -o openmax.o openmax.c
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE   -c -o sleep.o sleep.c
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE   -c -o sleepus_poll.o sleepus_poll.c
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE   -c -o sleepus_select.o sleepus_select.c
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  getpwsvr4.c -o getpwsvr4  -L../lib -lapue -pthread
    make[1]: Leaving directory `/home/u1/Documents/progs/apue.3e/exercises’
    [[u1@h1 apue.3e]$$

    此时应该成功了,我们把apue.h 与 libapue.a 放入到对应的目录中,用如下命令完成:

     cp ./include/apue.h /usr/include/
     cp ./lib/libapue.a /usr/local/lib/

    为什么要将libapue.a移到/usr/local/lib中呢?

    原因是libapue.a是apue.h头文件中包含的所有函数及宏定义的具体实现,是一个静态链接库。

    查看ld.conf.d/libc.conf你会发现gcc在搜索链接库的时候默认会去搜索/usr/local/lib/中的文件,所以我们将其放在这里,一劳永逸。。。。(不过自己要知道哦)

  • 相关阅读:
    hive数据类型
    hive类型转化错误,会错误提示指定分区参数
    [ORACLE]java.sql.SQLRecoverableException: IO Error: Connection rese
    oracle start with connect by prior 递归查询用法
    redis参数改进建议
    Android Studio教程--从Github 下载一个Repository
    Android Studio教程--Android项目分享到Github
    Android Studio Gradle Build Running 特别慢的问题探讨
    The Genymotion Virtual device could not obtain an IP address解决办法
    Android Studio教程--给Android Studio安装Genymotion插件
  • 原文地址:https://www.cnblogs.com/BinBinStory/p/7287688.html
Copyright © 2011-2022 走看看