LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 19309|回复: 4

“undefined reference to”是什么意思?

[复制链接]
发表于 2002-12-12 00:47:09 | 显示全部楼层 |阅读模式
今天我编译esound的时候,没有注意到其依赖于audiofile,以致出错。编译好audiofile后,回来重新编译esound,仍然有以下错误:

(cd .libs && rm -f libesddsp.so && ln -s libesddsp.so.0.2.29 libesddsp.so)
ar cru .libs/libesddsp.a  esddsp.o
ranlib .libs/libesddsp.a
creating libesddsp.la
(cd .libs && rm -f libesddsp.la && ln -s ../libesddsp.la libesddsp.la)
gcc -DHAVE_CONFIG_H -I. -I. -I.  -DSYSCONFDIR=\"/etc\"     -DSERVERDIR=\"/usr/bin\"    -g -O2 -c esdcat.c
/bin/sh ./libtool --mode=link gcc  -g -O2  -o esdcat  esdcat.o libesd.la
gcc -g -O2 -o .libs/esdcat esdcat.o  ./.libs/libesd.so
./.libs/libesd.so: undefined reference to `afGetSampleFormat'
./.libs/libesd.so: undefined reference to `afReadFrames'
./.libs/libesd.so: undefined reference to `afGetChannels'
./.libs/libesd.so: undefined reference to `afCloseFile'
./.libs/libesd.so: undefined reference to `afGetRate'
./.libs/libesd.so: undefined reference to `afGetFrameCount'
./.libs/libesd.so: undefined reference to `afOpenFile'
./.libs/libesd.so: undefined reference to `afGetTrackBytes'
collect2: ld returned 1 exit status
make[2]: *** [esdcat] Error 1
make[2]: Leaving directory `/usr/src/esound-0.2.29'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/src/esound-0.2.29'
make: *** [all-recursive-am] Error 2

正无奈的时候,决定删除这个目录(我想make clean也是可以的),重新解包、编译,竟然成功了!请问这个“undefined reference to”何解?
发表于 2002-12-12 08:32:50 | 显示全部楼层
是这样的,你安装了audiofile后,esound并不知道,因为它的configure脚本已经运行了,并生成了makefile,所以要make clean+make distclean,有时这样也不管用,有的包提供的make clean和make distclean脚本不能把生成的代码完全删除,最干净的方法就是重新解压。我觉得内核的make mrproper可能是最完善的脚本了,能把生成的东西全给删了。undefined reference就是缺少类型定义,一般是少头文件。
发表于 2006-10-5 23:20:49 | 显示全部楼层
神奇...
libtool所在行,没涉及到audiofile呀。
回复 支持 反对

使用道具 举报

发表于 2006-10-6 09:28:58 | 显示全部楼层
链接期的 "undefined reference to" 不是少头文件,一般是该链接的 *.so *.a *.o 没有找到,可能是
没有,位置不对,配置原因导致命令行里缺少,甚至 Makefile 出错。
回复 支持 反对

使用道具 举报

发表于 2006-10-6 12:36:47 | 显示全部楼层
Post by VirusCamp
链接期的 "undefined reference to" 不是少头文件,一般是该链接的 *.so *.a *.o 没有找到,可能是
没有,位置不对,配置原因导致命令行里缺少,甚至 Makefile 出错。

不是少头文件

但也应该不是找不到库或者目标文件,应该是找的到,但是那个库或目标文件里没有那个符号。

而没有那个符号的原因,要么是根本没有定义,要么是static的变量

不懂不要紧,看书就好了
linker and loader都已经翻译好了
不看浪费了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表