On Sat, Sep 3, 2016 at 10:56 AM, R n <[email protected]> wrote:
> By the way, I have also been playing with the compiling flags for FFmpeg, > but got different errors. For example: > > > I used '--extra-libs=-lmylibrary -L/usr/lib64 -lstdc++', and got: > > > .../binutils/2.25/centos6-native/da39a3e/bin/ld: .../mylibrary > /0.1/gcc-4.9-glibc-2.20-fb/80414d5/lib/libmylibrary.a(mylibrary_file.cpp.o): > relocation R_X86_64_32 against `.bss' can not be used when making a shared > object; recompile with -fPIC > > .../mylibrary/0.1/gcc-4.9-glibc-2.20-fb/80414d5/lib/libmylibrary.a: error > adding symbols: Bad value > > > I know this error. Try -fPIC -DPIC in the compiler and linker flags. > Thanks. > > > Rich > > > ------------------------------ > *发件人:* Libav-user <[email protected]> 代表 R n < > [email protected]> > *发送时间:* 2016年9月3日 3:54 > *收件人:* This list is about using libavcodec, libavformat, libavutil, > libavdevice and libavfilter. > *主题:* [Libav-user] 答复: Are there any ways to use a lib (built from C++ > OpenCV) in Ffmpeg filter? > > > Thanks Perette. > > > I did exactly what you suggested for the C and C++ files. (I have two > header files, one for C and another is for C++, and the C++ header file > includes > the C header file. I have one cpp file in which I put the C and C++ source > code. I can also split them into two cpp files for clarity). I guess > perhaps the problem is in the how I compile the library and how I compile > FFmpeg when I call the library from FFmpeg. > > > Any suggestions? > > > Thanks. > > > Rich > > > > > > ------------------------------ > *发件人:* Libav-user <[email protected]> 代表 Perette Barella < > [email protected]> > *发送时间:* 2016年9月3日 3:38 > *收件人:* This list is about using libavcodec, libavformat, libavutil, > libavdevice and libavfilter. > *主题:* Re: [Libav-user] Are there any ways to use a lib (built from C++ > OpenCV) in Ffmpeg filter? > > > On 2016年09月02日, at 22:32, R n <[email protected]> wrote: > I am writing a C++ library which is based on OpenCV. I want to use it in a > Ffmpeg filter (written in C), so I write a wrapper of the library using C. > The wrapper consists of a C header file and some C functions which call the > C++ functions (in the C++ files). I expect the FFmpeg filter to only > include the C header and call the C functions. > > … > > However, I get the following error when compiling FFmpeg: > .../binutils/2.25/centos6-native/da39a3e/bin/ld: > .../mylibrary/0.1/gcc-4.9-glibc-2.20/80414d5/lib/ > libmylibrary.a(mylibrary_file.cpp.o): undefined reference to symbol > '_ZdlPv@@GLIBCXX_3.4' > .../libgcc/4.9.x/gcc-4.9-glibc-2.20/024dbc3/lib/libstdc++.so: error > adding symbols: DSO missing from command line > > > Your approach is correct, but C++ “mangles” function names to make them > unique when considering parameters and such. You need to specify C > linkage, so in your .h file, wrap it in extern “C”: > > #ifdef __cplusplus > #warning is c++ > extern "C" { > #endif > char foo (int); > > #ifdef __cplusplus > } > #endif > > You need to #include the .h file in the corresponding .cpp file, so the > C++ compiler knows not to mangle those particular function names when > they’re compiled. > > Perette > > > > _______________________________________________ > Libav-user mailing list > [email protected] > http://ffmpeg.org/mailman/listinfo/libav-user > >
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
