Неопределенное Ссылочное затмение с помощью libav

Я пытаюсь установить новейшую версию libav с libav веб-сайта. В настоящее время быть версией 11.7. Я разархивировал, настроил, делаю и делаю установку.

Для./настраивать я попытался использовать различные варианты. Предусмотрительно, если бы я добавляю/удаляю опцию с./настраивать, я сделал бы это с новой копией исходного кода и также очистил освобождение и заголовки.

Дополнительные опции были:

./configure --enable-libx264 --enable-librtmp --enable-gpl --enable-nonfree --enable-muxer=mp4 --enable-muxer=h264 --enable-demuxer=aac --enable-demuxer=h264 --enable-encoder=libx264 --enable-encoder=libfdk_aac --enable-decoder=libfdk_aac --enable-version3

Я также усталый это без любых дополнительных опций.

В затмении IDE я настроил компилятор для включения/usr/local/libs в его путь поиска и также включал освобождение себя. Eclipse c++ libs/search path

Я не знаю, что еще сделать. Я продолжаю получать неопределенные ссылки.

Отредактируйте (Дополнительная информация): Я упростил код до, было это, только функция av_register_all ();. я все еще получаю ошибки. Вот некоторые:

/usr/local/lib/libavcodec.a(libx264.o): In function `X264_frame':
/usr/local/src/libav/libavcodec/libx264.c:140: undefined reference to `x264_picture_init'
/usr/local/src/libav/libavcodec/libx264.c:142: undefined reference to `x264_bit_depth'
/usr/local/src/libav/libavcodec/libx264.c:160: undefined reference to `x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:166: undefined reference to `x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:173: undefined reference to `x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:192: undefined reference to `x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:232: undefined reference to `x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:237: undefined reference to `x264_encoder_encode'
/usr/local/src/libav/libavcodec/libx264.c:243: undefined reference to `x264_encoder_delayed_frames'
/usr/local/src/libav/libavcodec/libx264.c:237: undefined reference to `x264_encoder_encode'
/usr/local/src/libav/libavcodec/libx264.c:179: undefined reference to `x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:198: undefined reference to `x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:186: undefined reference to `x264_encoder_reconfig'
/usr/local/lib/libavcodec.a(libx264.o): In function `X264_init_static':
/usr/local/src/libav/libavcodec/libx264.c:577: undefined reference to `x264_bit_depth'
/usr/local/lib/libavcodec.a(libx264.o): In function `X264_close':
/usr/local/src/libav/libavcodec/libx264.c:278: undefined reference to `x264_encoder_close'
/usr/local/lib/libavcodec.a(libx264.o): In function `X264_init':
/usr/local/src/libav/libavcodec/libx264.c:314: undefined reference to `x264_param_default'
/usr/local/src/libav/libavcodec/libx264.c:319: undefined reference to `x264_param_default_preset'
/usr/local/src/libav/libavcodec/libx264.c:415: undefined reference to `x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:416: undefined reference to `x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:417: undefined reference to `x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:418: undefined reference to `x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:459: undefined reference to `x264_param_apply_fastfirstpass'
/usr/local/src/libav/libavcodec/libx264.c:465: undefined reference to `x264_param_apply_profile'
/usr/local/src/libav/libavcodec/libx264.c:501: undefined reference to `x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:519: undefined reference to `x264_encoder_open_148'
/usr/local/src/libav/libavcodec/libx264.c:532: undefined reference to `x264_encoder_headers'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_subpacket':
/usr/local/src/libav/libavcodec/opusdec.c:382: undefined reference to `avresample_is_open'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_frame':
/usr/local/src/libav/libavcodec/opusdec.c:221: undefined reference to `avresample_is_open'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_init_resample':
/usr/local/src/libav/libavcodec/opusdec.c:163: undefined reference to `avresample_open'
/usr/local/src/libav/libavcodec/opusdec.c:169: undefined reference to `avresample_convert'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_frame':
/usr/local/src/libav/libavcodec/opusdec.c:236: undefined reference to `avresample_convert'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_flush_resample':
/usr/local/src/libav/libavcodec/opusdec.c:118: undefined reference to `avresample_convert'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_subpacket':
/usr/local/src/libav/libavcodec/opusdec.c:414: undefined reference to `avresample_close'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_flush':
/usr/local/src/libav/libavcodec/opusdec.c:616: undefined reference to `avresample_close'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_close':
/usr/local/src/libav/libavcodec/opusdec.c:640: undefined reference to `avresample_free'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_init':
/usr/local/src/libav/libavcodec/opusdec.c:704: undefined reference to `avresample_alloc_context'
/usr/local/lib/libavcodec.a(pthread_frame.o): In function `ff_frame_thread_free':
/usr/local/src/libav/libavcodec/pthread_frame.c:522: undefined reference to `pthread_join'
/usr/local/lib/libavcodec.a(pthread_frame.o): In function `ff_frame_thread_init':
/usr/local/src/libav/libavcodec/pthread_frame.c:648: undefined reference to `pthread_create'
/usr/local/lib/libavcodec.a(pthread_slice.o): In function `ff_slice_thread_free':
/usr/local/src/libav/libavcodec/pthread_slice.c:110: undefined reference to `pthread_join'
/usr/local/lib/libavcodec.a(pthread_slice.o): In function `ff_slice_thread_init':
/usr/local/src/libav/libavcodec/pthread_slice.c:211: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status

Чтобы быть более конкретным, освобождение установлено в/usr/local/lib каталоге, заголовки установлены/usr/local/include/libav*. Я также попытался компилировать свой исходный код командной строкой, а не IDE, дающим тот же результат.

параметр командной строки:

c++ -L/usr/local/lib test.cpp -lx264 -lavresample -lavformat -lavutil -lavcodec -lavutil -lz -lavutil -o out
1
задан 18 July 2016 в 20:05

2 ответа

Проблема - то, что libav библиотеки должны быть указаны в определенном порядке разрешить все зависимости. Я смог найти правильный порядок путем компиляции без дополнительных библиотек сначала. Затем, когда компилятор жаловался на некорректную ссылку, я определил местоположение библиотеки путем поиска с помощью Google того, какой библиотеке функция принадлежала. Я сделал это, пока все зависимости не были разрешены. Получающийся порядок был

  1. avformat
  2. avcodec
  3. avutil
  4. z
  5. x264
  6. pthread
  7. avresample

Используя g ++ для компиляции кода, я использовал эту команду:

c++ ./main.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil -lz -lx264 -lpthread -lavresample -o output

И это - то, на что это должно быть похожим в затмении: enter image description here

0
ответ дан 28 September 2019 в 23:04

Удостоверьтесь, что у Вас есть этот блок:

extern "C" {
#include<avformat/avformat.h>
#include<avformat/...whatever....h>
}

В файлах demux.cpp и codec.cpp также.

РЕДАКТИРОВАНИЕ

Испытанный, чтобы сделать то, что Вы сделали и хорошо работали. Вот то, что я сделал:

$ cat av.cpp 
extern "C" {
#include <libavformat/avformat.h>
}
int main(void)
{
  av_register_all();
  return 0;
}
$ g++ av.cpp -lavformat
$ ./a.out 

HTH

0
ответ дан 28 September 2019 в 23:04

Другие вопросы по тегам:

Похожие вопросы: