Проблемы со ссылками на исходный код примера ffmpeg - PullRequest
3 голосов
/ 30 января 2012

Мне удалось собрать ffmpeg и libx264 на моей машине с Ubuntu 11.10 из исходного кода.

Я пытаюсь работать с исходным файлом примера decoding_encoding.c. Примеры поставляются с make-файлом, поэтому я могу просто набрать «make all», и он волшебным образом компилирует и связывает все. Сейчас я пытаюсь скомпилировать и связать из командной строки, но не могу заставить его ссылаться.

Вот make-файл:

# 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 $@

%.o: %.c
        $(CC) $< $(CFLAGS) -c -o $@

.phony: all clean

all: $(OBJS) $(EXAMPLES)

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

Я могу скомпилировать источник, используя это:

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

Когда я пытаюсь связать, используя это:

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

Что-то не так с моей командой компоновщика? Я проверил make-файл и считаю, что делаю именно то, что такое make-файл .... или я?

Спасибо

Leo

1 Ответ

1 голос
/ 30 января 2012

Параметры -l должны идти после любых других параметров.

...