2012-01-29 37 views
3

我設法從我的Ubuntu 11.10機器上構建ffmpeg和libx264。連接ffmpeg示例源代碼的問題

我正在嘗試使用示例源文件decode_encoding.c。這些例子帶有一個makefile,所以我可以輸入「make all」,它可以編譯並鏈接所有內容。現在,我試圖從命令行進行編譯和鏈接,但似乎無法鏈接。

這裏是生成文件:

gcc -Wall -I/usr/local/include -c -o decoding_encoding.o decoding_encoding.c 

當我嘗試使用此鏈接:

# use pkg-config for getting CFLAGS abd LDFLAGS 
FFMPEG_LIBS=libavdevice libavformat libavfilter libavcodec libswscale libavutil 
CFLAGS+=$(shell pkg-config --cflags $(FFMPEG_LIBS)) 
LDFLAGS+=$(shell pkg-config --libs $(FFMPEG_LIBS)) 

EXAMPLES=decoding_encoding filtering metadata muxing 

OBJS=$(addsuffix .o,$(EXAMPLES)) 

%: %.o 
     $(CC) $< $(LDFLAGS) -o [email protected] 

%.o: %.c 
     $(CC) $< $(CFLAGS) -c -o [email protected] 

.phony: all clean 

all: $(OBJS) $(EXAMPLES) 

clean: 
     rm -rf $(EXAMPLES) $(OBJS) 

我可以用這個編譯源

gcc -Wall -L/usr/local/lib -lavdevice -lavformat -lavfilter -lavcodec -lswscale -lavutil -o decoding_encoding decoding_encoding.o 

在這一點上,我收到一個巨大的'未定義的參考錯誤'列表

decoding_encoding.o: In function `audio_encode_example': 
decoding_encoding.c:(.text+0x25): undefined reference to `avcodec_find_encoder' 
decoding_encoding.c:(.text+0x6a): undefined reference to `avcodec_alloc_context3' 
decoding_encoding.c:(.text+0xad): undefined reference to `avcodec_open' 
decoding_encoding.c:(.text+0x1ce): undefined reference to `sin' 
decoding_encoding.c:(.text+0x238): undefined reference to `avcodec_encode_audio' 
decoding_encoding.c:(.text+0x297): undefined reference to `avcodec_close' 
decoding_encoding.c:(.text+0x2a3): undefined reference to `av_free' 
decoding_encoding.o: In function `audio_decode_example': 
decoding_encoding.c:(.text+0x2f7): undefined reference to `av_init_packet' 
decoding_encoding.c:(.text+0x30b): undefined reference to `avcodec_find_decoder' 
decoding_encoding.c:(.text+0x359): undefined reference to `avcodec_alloc_context3' 
decoding_encoding.c:(.text+0x379): undefined reference to `avcodec_open' 
..... etc. 
collect2: ld returned 1 exit status 

我的連接器命令有問題嗎?我已經檢查了makefile,我相信我正在做makefile文件是....還是我?

感謝,

利奧

回答

1

-l選項後應任何其他選項去。

+0

我只是嘗試這樣做:GCC -Wall -o decoding_encoding -L在/ usr/local/lib目錄-lavdevice -lavformat -lavfilter -lavcodec -lswscale -lavutil decoding_encoding.o得到了相同的結果... – 2012-01-29 23:13:00

+0

對不起,我是不準確,'-l'選項應該在非選項參數之後。 – tripleee 2012-01-30 06:28:42

+0

是的,就是這樣。謝謝Tripleee! :) – 2012-01-30 12:25:02