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

2014-07-21 09:54:09 +08:00
 itsuibi
在官方下载了第三版的源码 执行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这个函数定义,可是却不知道如何解决,不知道为理解对不对希望大家指点迷经。
7016 次点击
所在节点    Linux
9 条回复
lu18887
2014-07-21 11:16:32 +08:00
heapsort 很有可能是APUE 里面自己写的函数,检查一下你的INLCUDE路径里面有没有包含这个函数的头文件。 就是 "-I" 这后面的路径。
bengol
2014-07-21 11:18:10 +08:00
只针对这个错误:可以自己在新的源文件里写个heapsort,编译生成一个.o文件,然后在编译barrier.c时链接进去。或者就直接在barrier.c文件里面写个heapsort的实现
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
2014-07-21 11:24:27 +08:00
linux也用qsort就可以了
jiang42
2014-07-21 11:37:18 +08:00
话说 Linux 和 Unix 还是有些不同的,换 BSD 系的系统应该会好些
jamesxu
2014-07-21 11:46:21 +08:00
已经在 CentOS 7 下测试搞定了,Ubuntu 下装个 libbsd-dev 就行,CentOS 7 去找 Fedora 源里的 libbsd 源码包,自己重新生成 RPM 文件安装就行
itsuibi
2014-07-21 12:13:01 +08:00
@jamesxu应该选择fedora 哪个版本的呢,我刚才装了个redhat 的libbsd 还是不行。
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
2014-07-21 13:03:51 +08:00
@jamesxu 非常感谢您,make通过了 ,刚接触自个搜索了半天没有查出个所以然,再感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/123672

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX