簡體   English   中英

FFmpeg似乎是版本沖突

[英]FFmpeg seems to be version conflict

我正在使用ffmpeg的git版本(在成功使用舊版本后更新),當我嘗試編譯我的項目時,我得到了

 /usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_subpacket':
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:376: undefined reference to `swr_is_initialized'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_frame':
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:222: undefined reference to `swr_is_initialized'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_init_resample':
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:163: undefined reference to `swr_init'
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:169: undefined reference to `swr_convert'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_frame':
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:236: undefined reference to `swr_convert'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_flush_resample':
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:117: undefined reference to `swr_convert'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_subpacket':
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:408: undefined reference to `swr_close'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_flush':
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:557: undefined reference to `swr_close'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_close':
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:579: undefined reference to `swr_free'
/usr/local/lib/libavcodec.a(opusdec.o): In function `opus_decode_init':
/home/user/projects/ffmpleglast/ffmpeg/libavcodec/opusdec.c:629: undefined reference to `swr_alloc'

好像是版本沖突? 但是如何刪除錯誤的庫? 他們似乎是今天的建築。

ls -l /usr/local/lib
-rw-r--r-- 1 root root  136509684 may   29 14:47 libavcodec.a
-rw-r--r-- 1 root root    1853574 may   29 14:47 libavdevice.a
-rw-r--r-- 1 root root    9689456 may   29 14:47 libavfilter.a
-rw-r--r-- 1 root root   46282270 may   29 14:47 libavformat.a
-rw-r--r-- 1 root root    2092250 may   29 14:47 libavutil.a
-rw-r--r-- 1 root root      67942 may   12 11:29 libBasicUsageEnvironment.a
-rw-r--r-- 1 root root    2200164 apr.  10 10:11 libfftw3.a
-rwxr-xr-x 1 root root        872 apr.  10 10:11 libfftw3.la
-rw-r--r-- 1 root root      94188 may   12 11:29 libgroupsock.a
-rw-r--r-- 1 root root    2236084 may   12 11:29 libliveMedia.a
-rw-r--r-- 1 root root     546506 may   29 14:47 libswresample.a
-rw-r--r-- 1 root root    4813716 may   29 14:47 libswscale.a
-rw-r--r-- 1 root root      14588 may   12 11:29 libUsageEnvironment.a

當我構建試圖引入ffmpeg DLL的DLL時,我遇到了同樣的錯誤。

我在ffmpeg包含文件周圍缺少extern C語句:

extern "C"
{
#include "include\libavcodec\avcodec.h"
#include "include\libavformat\avformat.h"
#include "include\libavformat\avio.h"
#include "include\libswscale\swscale.h"
#include "include\libavutil\dict.h"
#include "include\libavutil\frame.h"
}

我還發現我需要將DLL作為依賴項添加到解決方案中,或使用pragma語句來將其包括在內。

#pragma comment(lib, "..\\..\\..\\..\\contrib\\ffmpeg\\lib\\avformat.lib")
#pragma comment(lib, "..\\..\\..\\..\\contrib\\ffmpeg\\lib\\swscale.lib")
#pragma comment(lib, "..\\..\\..\\..\\contrib\\ffmpeg\\lib\\avutil.lib")

這是在Windows上,只是告訴VS,指定的lib文件詳細說明了相同位置DLL的接口。 您不需要在Linux上使用它,因為您的-lavformat etc語句應該可以覆蓋它,但是我懷疑您可能需要extern C部分。

如果仍然無法解決問題,則可以在編譯/鏈接上使用詳細模式,以便您查看來自何處的內容。

您可能還已經在系統中安裝了ffmpeg(在/ usr / lib和/ usr / include中)。 嘗試使用-I參數(/ usr / local / include)強制包含路徑,使用-L參數(/ usr / local / lib)強制包含庫路徑

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM