0

我正在尝试使用FFMpeg库构建一个非常简单的 Qt 程序。

目前我只想打开和关闭一个视频文件。

这是我的项目文件:

QT    += core gui
TARGET = avtest01
TEMPLATE = app
INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/lib -lavformat
SOURCES += main.cpp

我的代码:

#include <QDebug>

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

int main(int argc, char *argv[])
{
    if(argc > 1)
    {
        AVFormatContext *format_context;
        qDebug() << argv[1];
        if(avformat_open_input(&format_context, argv[1], NULL, NULL) == 0)
        {
            qDebug() << "open";
            avformat_close_input(&format_context);
        }
        else
            qDebug() << "error opening " << argv[1];
    }    
    return 0;
}

不幸的是,链接器失败了:

Undefined symbols for architecture x86_64:
  "avformat_open_input(AVFormatContext**, char const*, AVInputFormat*, AVDictionary**)", referenced from:
    _main in main.o
  "avformat_close_input(AVFormatContext**)", referenced from:
    _main in main.o

我在 MacOS 上使用 Qt 5.1.0。

4

1 回答 1

1

在我添加av_register_all();到 main.js 之后,您的代码对我有用。

我的猜测是你已经为 32 位编译了 avformat。file /usr/local/lib/libavformat.dylib您可以通过在终端中运行来确认。

输出应如下所示:

/usr/local/lib/libavformat.dylib: Mach-O 64-bit dynamically linked shared library x86_64
于 2013-10-02T21:12:39.217 回答