Closed lapsule closed 10 years ago
Can you try the latest version in the master branch?
你说的是 ffmpeg 最新版本还是你修改的这个 fmd 的最新版本?最新的 ffmpeg 我已经试过了,一样的结果。
或许你把自己的开发环境信息贴出来会让同学们更快的上手
我指repo里面最新的commit;我改了一下makefile From: ruikingSent: Friday, 29 November 2013 07:47To: lynnard/fmdReply To: lynnard/fmdCc: Lingnan DaiSubject: Re: [fmd] 编译过程遇到链接问题 (#1)你说的是 ffmpeg 最新版本还是你修改的这个 fmd 的最新版本?最新的 ffmpeg 我已经试过了,一样的结果。
或许你把自己的开发环境信息贴出来会让同学们更快的上手
—Reply to this email directly or view it on GitHub.
嗯, 看起来 error 少了很多了 :) 但还有一些问题,我试着把 -lswresample 放到最后也不成,一样的结果:
pi@raspberrypi ~/afmd $ make clean
rm *.o
pi@raspberrypi ~/afmd $ make
gcc -Wall -c app.c
gcc -Wall -c config.c
gcc -Wall -c downloader.c
gcc -Wall -c player.c
gcc -Wall -c playlist.c
gcc -Wall -c server.c
gcc -Wall -c util.c
gcc -Wall -c validator.c
gcc -Wall -o fmd app.o config.o downloader.o player.o playlist.o server.o util.o validator.o -lcurl -ljson-c -lao -lpthread -lavformat -lavcodec -lswresample -lavutil -lcrypto
/usr/local/lib/libswresample.a(swresample.o): In function `swr_init':
/home/pi/ffmpeg/libswresample/swresample.c:304: undefined reference to `av_get_default_channel_layout'
/home/pi/ffmpeg/libswresample/swresample.c:306: undefined reference to `av_get_default_channel_layout'
/home/pi/ffmpeg/libswresample/swresample.c:312: undefined reference to `av_get_planar_sample_fmt'
/home/pi/ffmpeg/libswresample/swresample.c:314: undefined reference to `av_get_planar_sample_fmt'
/home/pi/ffmpeg/libswresample/swresample.c:315: undefined reference to `av_get_planar_sample_fmt'
/home/pi/ffmpeg/libswresample/swresample.c:319: undefined reference to `av_get_planar_sample_fmt'
/usr/local/lib/libswresample.a(rematrix.o): In function `auto_matrix':
/home/pi/ffmpeg/libswresample/rematrix.c:313: undefined reference to `av_get_packed_sample_fmt'
/home/pi/ffmpeg/libswresample/rematrix.c:314: undefined reference to `av_get_packed_sample_fmt'
/usr/local/lib/libswresample.a(rematrix.o): In function `swri_rematrix_init':
/home/pi/ffmpeg/libswresample/rematrix.c:356: undefined reference to `av_calloc'
/home/pi/ffmpeg/libswresample/rematrix.c:366: undefined reference to `av_calloc'
/home/pi/ffmpeg/libswresample/rematrix.c:376: undefined reference to `av_calloc'
player.o: In function `get_dest_sample_fmt_from_sample_fmt':
player.c:(.text+0x3cc): undefined reference to `av_opt_set_sample_fmt'
player.c:(.text+0x434): undefined reference to `av_opt_set_sample_fmt'
player.o: In function `play_thread':
player.c:(.text+0xe4c): undefined reference to `av_samples_alloc_array_and_samples'
player.o: In function `fm_player_open':
player.c:(.text+0x135c): undefined reference to `av_frame_alloc'
player.o: In function `fm_player_close':
player.c:(.text+0x1424): undefined reference to `av_frame_free'
/usr/local/lib/libswresample.a(audioconvert.o): In function `swri_audio_convert_alloc':
/home/pi/ffmpeg/libswresample/audioconvert.c:129: undefined reference to `av_get_packed_sample_fmt'
/home/pi/ffmpeg/libswresample/audioconvert.c:129: undefined reference to `av_get_packed_sample_fmt'
/home/pi/ffmpeg/libswresample/audioconvert.c:138: undefined reference to `av_get_planar_sample_fmt'
/home/pi/ffmpeg/libswresample/audioconvert.c:139: undefined reference to `av_get_planar_sample_fmt'
/usr/local/lib/libswresample.a(dither.o): In function `swri_dither_init':
/home/pi/ffmpeg/libswresample/dither.c:83: undefined reference to `av_get_packed_sample_fmt'
/home/pi/ffmpeg/libswresample/dither.c:84: undefined reference to `av_get_packed_sample_fmt'
/usr/local/lib/libswresample.a(resample.o): In function `resample_init':
/home/pi/ffmpeg/libswresample/resample.c:238: undefined reference to `av_calloc'
collect2: ld returned 1 exit status
make: *** [fmd] 错误 1
Can you try the latest commit again?
看起来好像在编码安装 ffmpeg 的时候没有把相应的 lib 放对位置还是需要在 Makefile 里面指定一下?
pi@raspberrypi ~/afmd $ make clean
rm *.o
pi@raspberrypi ~/afmd $ make
gcc -Wall -c app.c
gcc -Wall -c config.c
gcc -Wall -c downloader.c
gcc -Wall -c player.c
gcc -Wall -c playlist.c
gcc -Wall -c server.c
gcc -Wall -c util.c
gcc -Wall -c validator.c
gcc -Wall -o fmd app.o config.o downloader.o player.o playlist.o server.o util.o validator.o -lcurl -ljson-c -lao -lpthread -lcrypto -libavdevice -libavformat -libavfilter -libavcodec -libswresample -libswscale -libavutil
/usr/bin/ld: cannot find -libavdevice
/usr/bin/ld: cannot find -libavformat
/usr/bin/ld: cannot find -libavfilter
/usr/bin/ld: cannot find -libavcodec
/usr/bin/ld: cannot find -libswresample
/usr/bin/ld: cannot find -libswscale
/usr/bin/ld: cannot find -libavutil
collect2: ld returned 1 exit status
dev 分支上的已经可以编译通过了! :+1:
但运行的时候还是找不到 lib 文件,报错如下:
pi@raspberrypi ~/afmd $ ./fmd
./fmd: error while loading shared libraries: libjson-c.so.2: cannot open shared object file: No such file or directory
我的这个库位置是 :
/usr/local/lib/libjson-c.so.2
能不能运行下ldconfig
然后再build一下
可能需要sudo
dev branch最新的再试下吧,我把json-c也放到pkg-config的libs里了,这样希望可以尽量解决compatibility issues.
可以了!非常感谢!
pi@raspberrypi ~/afmd $ sudo ldconfig
pi@raspberrypi ~/afmd $ make clean
rm *.o
pi@raspberrypi ~/afmd $ make
gcc -I/usr/local/include -I/usr/local/include/json-c -Wall -c app.c
gcc -I/usr/local/include -I/usr/local/include/json-c -Wall -c config.c
gcc -I/usr/local/include -I/usr/local/include/json-c -Wall -c downloader.c
gcc -I/usr/local/include -I/usr/local/include/json-c -Wall -c player.c
gcc -I/usr/local/include -I/usr/local/include/json-c -Wall -c playlist.c
gcc -I/usr/local/include -I/usr/local/include/json-c -Wall -c server.c
gcc -I/usr/local/include -I/usr/local/include/json-c -Wall -c util.c
gcc -I/usr/local/include -I/usr/local/include/json-c -Wall -c validator.c
gcc -I/usr/local/include -I/usr/local/include/json-c -Wall -o fmd app.o config.o downloader.o player.o playlist.o server.o util.o validator.o -pthread -L/usr/local/lib -lavformat -lavcodec -ldl -lz -lrt -lswresample -lavutil -lm -lcurl -ljson-c -lao -lcrypto -lpthread
pi@raspberrypi ~/afmd $ ./fmd
pi@raspberrypi ~/afmd $
能帮我看一这个问题吗?这个是因为c的标准库的问题吗,我装的ffmpeg的最新版本,程序一编译就报错
不清楚你编译的是什么 - 不过看error好像是没有glibc的math lib的symbol。可以尝试在command line最后加上-lm
试试,调整 avutil 的链接顺序
结果如下: