V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
itsuibi
V2EX  ›  Linux

APUE APUE unix 环境高级编程第三版 源码无法 make 成功 ,贴出了出错代码,麻烦您给看看,愁坏我了

  •  
  •   itsuibi · 2014-07-21 09:54:09 +08:00 via Android · 7015 次点击
    这是一个创建于 3567 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在官方下载了第三版的源码 执行make不通过

    运行环境:centos7
    编译:gcc

    下面是出错代码:

    making threads
    make[1]: 进入目录“/home/dreamer/tmp/apue.3e/threads”
    gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  barrier.c -o barrier  -L../lib -lapue -pthread -lrt -lbsd
    /tmp/ccjlRLNh.o:在函数‘thr_fn’中:
    barrier.c:(.text+0x80):对‘heapsort’未定义的引用
    collect2: 错误:ld 返回 1
    make[1]: *** [barrier] 错误 1
    make[1]: 离开目录“/home/dreamer/tmp/apue.3e/threads”
    make: *** [all] 错误 1
    [root@localhost apue.3e]# 

    搞不懂了,按我的理解应该是没有heapsort这个函数定义,可是却不知道如何解决,不知道为理解对不对希望大家指点迷经。
    第 1 条附言  ·  2014-07-21 13:12:02 +08:00
    感谢大家的热心帮助,根据大牛jamesxu的详细步骤耐心解答,问题已经解决了,再次感谢大家。
    9 条回复    2014-07-21 13:03:51 +08:00
    lu18887
        1
    lu18887  
       2014-07-21 11:16:32 +08:00
    heapsort 很有可能是APUE 里面自己写的函数,检查一下你的INLCUDE路径里面有没有包含这个函数的头文件。 就是 "-I" 这后面的路径。
    bengol
        2
    bengol  
       2014-07-21 11:18:10 +08:00
    只针对这个错误:可以自己在新的源文件里写个heapsort,编译生成一个.o文件,然后在编译barrier.c时链接进去。或者就直接在barrier.c文件里面写个heapsort的实现
    scalala
        3
    scalala  
       2014-07-21 11:23:39 +08:00
    --- a/threads/barrier.c
    +++ b/threads/barrier.c
    @@ -12,12 +12,7 @@ long snums[NUMNUM];

    pthread_barrier_t b;

    -#ifdef SOLARIS
    #define heapsort qsort
    -#else
    -extern int heapsort(void *, size_t, size_t,
    - int (*)(const void *, const void *));
    -#endif

    /*
    * Compare two long integers (helper function for heapsort)
    scalala
        4
    scalala  
       2014-07-21 11:24:27 +08:00
    linux也用qsort就可以了
    jiang42
        5
    jiang42  
       2014-07-21 11:37:18 +08:00
    话说 Linux 和 Unix 还是有些不同的,换 BSD 系的系统应该会好些
    jamesxu
        6
    jamesxu  
       2014-07-21 11:46:21 +08:00   ❤️ 1
    已经在 CentOS 7 下测试搞定了,Ubuntu 下装个 libbsd-dev 就行,CentOS 7 去找 Fedora 源里的 libbsd 源码包,自己重新生成 RPM 文件安装就行
    itsuibi
        7
    itsuibi  
    OP
       2014-07-21 12:13:01 +08:00 via Android
    @jamesxu应该选择fedora 哪个版本的呢,我刚才装了个redhat 的libbsd 还是不行。
    jamesxu
        8
    jamesxu  
       2014-07-21 12:26:12 +08:00
    @itsuibi 我用的 rawhide,编译完上传了:
    libbsd: http://pan.baidu.com/s/1c0d8UNe
    libbsd-devel: http://pan.baidu.com/s/1eQ5VhFO
    itsuibi
        9
    itsuibi  
    OP
       2014-07-21 13:03:51 +08:00 via Android
    @jamesxu 非常感谢您,make通过了 ,刚接触自个搜索了半天没有查出个所以然,再感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5441 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 08:56 · PVG 16:56 · LAX 01:56 · JFK 04:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.