您的位置:首页 > Web前端

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

2014-07-28 09:48 429 查看
ffmpeg编程开发中的编译问题(2010-10-23 18:55:34)

转载:http://blog.sina.com.cn/s/blog_5c4dd3330100mpdx.html

由于项目需要,刚开始学习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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐