链接主程序时,共享库中未定义的FFMPEG引用
我建立了一个共享库,它引用了链接主程序时,共享库中未定义的FFMPEG引用,ffmpeg,linker,Ffmpeg,Linker,我建立了一个共享库,它引用了FFMPEG库。我很难把最后的申请联系起来。我花了好几个小时摆弄图书馆的秩序,但毫无乐趣 g++ -o testVideoTranscode testVideoTranscode.o /usr/lib/libstdc++.so.6 -L../../../lib3p -lavutil -lswresample -lavcodec -L../../../lib -ldvsutils -ldvscfg -ldvstc -lstdc++ -lmch264dec -lfree
FFMPEG
库。我很难把最后的申请联系起来。我花了好几个小时摆弄图书馆的秩序,但毫无乐趣
g++ -o testVideoTranscode testVideoTranscode.o /usr/lib/libstdc++.so.6 -L../../../lib3p -lavutil -lswresample -lavcodec -L../../../lib -ldvsutils -ldvscfg -ldvstc -lstdc++ -lmch264dec -lfreeimage -lpthread
../../../lib/libdvstc.so: undefined reference to `sws_getContext(int, int, AVPixelFormat, int, int, AVPixelFormat, int, SwsFilter*, SwsFilter*, double const*)'
../../../lib/libdvstc.so: undefined reference to `av_frame_alloc()'
../../../lib/libdvstc.so: undefined reference to `avcodec_close(AVCodecContext*)'
etc etc
例如,一个缺少的符号,av\u frame\u alloc()
,正确地位于ibavutil.so
库中(尽管位于非标准位置):
我的库,libdvstc.so
,正确显示了对符号和文件的引用:
nm -D --demangle ../../../lib/libdvstc.so | grep av_frame_alloc
U av_frame_alloc()
ldd ../../../lib/libdvstc.so
linux-gate.so.1 => (0xb77c3000)
libavutil.so.55 => /mnt/swdevel/DVStor/source_build/lib3p/libavutil.so.55 (0xb772f000)
libswresample.so.2 => /mnt/swdevel/DVStor/source_build/lib3p/libswresample.so.2 (0xb7714000)
libavcodec.so.57 => /mnt/swdevel/DVStor/source_build/lib3p/libavcodec.so.57 (0xb623f000)
libstdc++.so.5 => /usr/local/dvstor/lib/libstdc++.so.5 (0xb616f000)
libm.so.6 => /lib/libm.so.6 (0xb6144000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb6126000)
libc.so.6 => /lib/libc.so.6 (0xb5f8f000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb5f74000)
librt.so.1 => /lib/librt.so.1 (0xb5f6b000)
libdl.so.2 => /lib/libdl.so.2 (0xb5f65000)
libz.so.1 => /lib/libz.so.1 (0xb5f51000)
/lib/ld-linux.so.2 (0x00871000)
一切都在那里。我被卡住了…在FFmpeg头的include语句周围使用extern“C”:
extern "C" {
#include <libavutil/avutil.h>
#include <libswscale/swscale.h>
[etc]
}
extern“C”{
#包括
#包括
[等]
}
大多数库都会为您这样做,但出于某种哲学原因,FFmpeg不会这样做。在FFmpeg头的include语句周围使用extern“C”:
extern "C" {
#include <libavutil/avutil.h>
#include <libswscale/swscale.h>
[etc]
}
extern“C”{
#包括
#包括
[等]
}
大多数库都会为您这样做,但出于某种哲学原因,FFmpeg不会这样做。另一种方法()是通过以下格式链接到FFmpeg库进行编译:
gcc -o main.o main.c `pkg-config --cflags --libs libavformat libavutil`
另一种方法()是通过以下格式链接到ffmpeg库进行编译:
gcc -o main.o main.c `pkg-config --cflags --libs libavformat libavutil`