编译过程中"undefined reference to"问题

ffmpeg编程开发中的编译问题(2010-10-23 18:55:34)

由于项目需要,刚开始学习ffmpeg编程开发,想先找个范例程序试试,于是就用源码包中的api-example.c文件编译了一下,编译过程主要遇到了两个问题,在网上查了一些解决方法,总算是搞定了。
1.如果直接用gcc api-example.c命令编译会出现以下错误信息:
/tmp/ccYIJH73.o: In function `main':
api-example.c:(.text+0xfd4): undefined reference to `avcodec_init'
api-example.c:(.text+0xfd9): undefined reference to `avcodec_register_all'
......
......
collect2: ld 返回 1

其原因是没有加载ffmpeg库,用如下命令就可解决些问题
gcc api-example.c -lavcodec -lavformat -lavutil
 
不过此时仍会报错:
/usr/local/src/ffmpeg-0.6.1/libavcodec/aacpsy.c:109: undefined reference to `pow'
......
/usr/local/src/ffmpeg-0.6.1/libavcodec/aacpsy.c:109: undefined reference to `exp'
......
/usr/local/src/ffmpeg-0.6.1/libavcodec/aacps_tablegen.h:160: undefined reference to `sincosf'
......
/usr/local/src/ffmpeg-0.6.1/libavcodec/aacps_tablegen.h:180: undefined reference to `sincos'
......
/usr/local/src/ffmpeg-0.6.1/libavcodec/lcldec.c:131: undefined reference to `inflateReset'
......
/usr/local/src/ffmpeg-0.6.1/libavcodec/lcldec.c:140: undefined reference to `inflate'
......
/usr/local/src/ffmpeg-0.6.1/libavcodec/pngenc.c:199: undefined reference to `crc32'
 
其中从pow, exp, sincosf, sincos可以看出是一些数学函数,需要链接数学函数链,即在编译选项中添加"-lm",而inflateReset, inflate, crc32等,网上查到说是要加载通用例程库,具体是什么还有待研究,可以用-lz选项加载这个库。
最后,能够成功进行编译的命令如下:
gcc api-example.c -lavcodec -lavformat -lavutil -lm -lz
 

posted on 2014-07-28 09:48  七层模型  阅读(2434)  评论(0)    收藏  举报

导航