[Libav-user] Linker error libswresample

Davide Caresia caresia.davide at gmail.com
Sun Aug 9 15:49:06 CEST 2015


Ok it's getting stranger and stranger.
I tried to comment or delete the av_calloc calls in rematrix.c, and it gave
the same error.
Now, i'm not an expert programmer, but if I change the line that the
compiler says causes the problem,
the output should change. I can only think now, that the problem is inside
libswresample.a

2015-08-08 16:42 GMT+02:00 Davide Caresia <caresia.davide at gmail.com>:

> No luck even with that order.
>
> "/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS=
> .build-conf
> make[1]: ingresso nella directory
> "/home/davide/Documenti/Tesi/audiosync-fin/audiosync"
> "/usr/bin/make"  -f nbproject/Makefile-Debug.mk
> dist/Debug/GNU-Linux-x86/audiosync
> make[2]: ingresso nella directory
> "/home/davide/Documenti/Tesi/audiosync-fin/audiosync"
> mkdir -p build/Debug/GNU-Linux-x86
> rm -f "build/Debug/GNU-Linux-x86/dataReader.o.d"
> g++    -c -g -MMD -MP -MF "build/Debug/GNU-Linux-x86/dataReader.o.d" -o
> build/Debug/GNU-Linux-x86/dataReader.o dataReader.cpp
> mkdir -p dist/Debug/GNU-Linux-x86
> g++ -o dist/Debug/GNU-Linux-x86/audiosync
> build/Debug/GNU-Linux-x86/dataReader.o build/Debug/GNU-Linux-x86/main.o
> build/Debug/GNU-Linux-x86/tansforms.o build/Debug/GNU-Linux-x86/tognuplot.o
>  -lavformat -lavcodec -lswresample -lavutil -lz -lm -llzma -lfftw3
> /usr/local/lib/libswresample.a(rematrix.o): nella funzione
> "swri_rematrix_init":
> /home/davide/Documenti/Tesi/Libraries/ffmpeg/ffmpeg-2.7.2/libswresample/rematrix.c:365:
> riferimento non definito a "av_calloc"
> /home/davide/Documenti/Tesi/Libraries/ffmpeg/ffmpeg-2.7.2/libswresample/rematrix.c:377:
> riferimento non definito a "av_calloc"
> /home/davide/Documenti/Tesi/Libraries/ffmpeg/ffmpeg-2.7.2/libswresample/rematrix.c:389:
> riferimento non definito a "av_calloc"
> /usr/local/lib/libswresample.a(resample.o): nella funzione "resample_init":
> /home/davide/Documenti/Tesi/Libraries/ffmpeg/ffmpeg-2.7.2/libswresample/resample.c:220:
> riferimento non definito a "av_calloc"
> collect2: error: ld returned 1 exit status
> nbproject/Makefile-Debug.mk:65: set di istruzioni per l'obiettivo
> "dist/Debug/GNU-Linux-x86/audiosync" non riuscito
> make[2]: *** [dist/Debug/GNU-Linux-x86/audiosync] Errore 1
> make[2]: uscita dalla directory
> "/home/davide/Documenti/Tesi/audiosync-fin/audiosync"
> nbproject/Makefile-Debug.mk:62: set di istruzioni per l'obiettivo
> ".build-conf" non riuscito
> make[1]: *** [.build-conf] Errore 2
> make[1]: uscita dalla directory
> "/home/davide/Documenti/Tesi/audiosync-fin/audiosync"
> nbproject/Makefile-impl.mk:39: set di istruzioni per l'obiettivo
> ".build-impl" non riuscito
> make: *** [.build-impl] Errore 2
>
> BUILD FAILED (exit value 2, total time: 381ms)
>
>>
>>
To remind the problem:

I'm trying to set-up a function, using the ffmpeg c api 2.7.2, to re-sample
a stream (AVStream format) to fixed (1channel - u8 sample) format.

I'm using ffmpeg libswresample library, but when I try to compile, I get a
linker error that is strictly connected to swresample functions.

Let me post the code:
----------------------------
double *resample8(AVFrame *frame, int size, AVCodec* codec){

    /* initialization of the output array */
    double *out = new double[size];
    /* create resampling context */
    struct SwrContext *resampleContext;
    resampleContext = swr_alloc();
    if (!resampleContext) {
fprintf(stderr, "Could not allocate resampler context\n");
return NULL;
    }

    /* set options */
    av_opt_set_int(resampleContext, "in_channel_layout",
*(codec->channel_layouts), 0);
    av_opt_set_sample_fmt(resampleContext, "in_sample_fmt",
*(codec->sample_fmts), 0);

    av_opt_set_int(resampleContext, "out_channel_layout",
AV_CH_LAYOUT_MONO, 0);
    av_opt_set_sample_fmt(resampleContext, "out_sample_fmt",
AV_SAMPLE_FMT_U8, 0);

    /* initialize the resampling context */
    if (swr_init(resampleContext) < 0) {
fprintf(stderr, "Failed to initialize the resampling context\n");
return NULL;
    }

    return NULL;

}
------------------------------------

Here is the inclusion:
------------------------------------
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libavutil/avutil.h>
    #include <libavutil/opt.h>
    #include <libavutil/channel_layout.h>
    #include <libavutil/samplefmt.h>
    #include <libswresample/swresample.h>
#ifdef __cplusplus
} // end extern "C".
#endif // __cplusplus
----------------------------------

And here is the error I get, compiling with netbeans 8.0.2, g++
4.9.2-10ubuntu13
(additional g++ commands: -lavcodec -lavformat -lavutil -lswresample
-lfftw3 -lm)
----------------------------------
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS=
.build-conf
make[1]: ingresso nella directory
"/home/davide/Documenti/Tesi/audiosync-fin/audiosync"
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk
dist/Debug/GNU-Linux-x86/audiosync
make[2]: ingresso nella directory
"/home/davide/Documenti/Tesi/audiosync-fin/audiosync"
mkdir -p build/Debug/GNU-Linux-x86
rm -f "build/Debug/GNU-Linux-x86/main.o.d"
g++    -c -g -MMD -MP -MF "build/Debug/GNU-Linux-x86/main.o.d" -o
build/Debug/GNU-Linux-x86/main.o main.cpp
mkdir -p dist/Debug/GNU-Linux-x86
g++ -o dist/Debug/GNU-Linux-x86/audiosync
build/Debug/GNU-Linux-x86/dataReader.o build/Debug/GNU-Linux-x86/main.o
build/Debug/GNU-Linux-x86/tansforms.o build/Debug/GNU-Linux-x86/tognuplot.o
 -lavcodec -lavformat -lavutil -lswresample -lfftw3 -lm
build/Debug/GNU-Linux-x86/dataReader.o: nella funzione "resample8(AVFrame*,
int, AVCodec*)":
/home/davide/Documenti/Tesi/audiosync-fin/audiosync/dataReader.cpp:285:
riferimento non definito a "av_opt_set_sample_fmt"
/home/davide/Documenti/Tesi/audiosync-fin/audiosync/dataReader.cpp:288:
riferimento non definito a "av_opt_set_sample_fmt"
/usr/local/lib/libswresample.so: riferimento non definito a
"av_calloc at LIBAVUTIL_54"
collect2: error: ld returned 1 exit status
nbproject/Makefile-Debug.mk:65: set di istruzioni per l'obiettivo
"dist/Debug/GNU-Linux-x86/audiosync" non riuscito
make[2]: *** [dist/Debug/GNU-Linux-x86/audiosync] Errore 1
make[2]: uscita dalla directory
"/home/davide/Documenti/Tesi/audiosync-fin/audiosync"
nbproject/Makefile-Debug.mk:62: set di istruzioni per l'obiettivo
".build-conf" non riuscito
make[1]: *** [.build-conf] Errore 2
make[1]: uscita dalla directory
"/home/davide/Documenti/Tesi/audiosync-fin/audiosync"
nbproject/Makefile-impl.mk:39: set di istruzioni per l'obiettivo
".build-impl" non riuscito
make: *** [.build-impl] Errore 2

BUILD FAILED (exit value 2, total time: 5s)
------------------------------------------------------------

here is the linker configuration
https://drive.google.com/file/d/0B2l6FPXN1f-EaEJfNmV2cjVUemM/view?usp=sharing

I searched for any clue about the linker error, and I found that it could
be caused by multiple versions of ffmpeg installed. I removed ubuntu (I'm
using 15.04) base installation of ffmpeg and installed ffmpeg 2.7.2 from
the tar downloaded by ffmpeg.org

I can't seem to find a solution at the moment, can anyone help?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20150809/6bc0de13/attachment.html>


More information about the Libav-user mailing list