次のヘッダー ファイルを (C で) 定義しました。これは必要ないため、関数の実装は省略しました。
#ifndef FFMPEG_MEDIAMETADATARETRIEVER_H_
#define FFMPEG_MEDIAMETADATARETRIEVER_H_
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavutil/dict.h>
int setDataSource(AVFormatContext** pFormatCtx, const char* path);
#endif /*FFMPEG_MEDIAMETADATARETRIEVER_H_*/
C++ では、2 つ目のヘッダー ファイルを次のように定義しました。
#ifndef MEDIAMETADATARETRIEVER_H
#define MEDIAMETADATARETRIEVER_H
using namespace std;
extern "C" {
#include "ffmpeg_mediametadataretriever.h"
}
class MediaMetadataRetriever
{
public:
MediaMetadataRetriever();
~MediaMetadataRetriever();
int setDataSource(const char* dataSourceUrl);
};
#endif // MEDIAMETADATARETRIEVER_H
mediametadataretriever.cpp で、次の関数を定義しました。
int MediaMetadataRetriever::setDataSource(
const char *srcUrl)
{
// should call C function
AVFormatContext* pFormatCtx;
return setDataSource(&pFormatCtx, srcUrl);
}
この (C++) プロジェクトを Eclipse でコンパイルしようとすると、次のような「一致する関数呼び出しがありません...」というエラーが表示されます。
return setDataSource(&pFormatCtx, srcUrl);
呼び出しをコメントアウトすると、コードは正常にコンパイルされます。
int MediaMetadataRetriever::setDataSource(
const char *srcUrl)
{
return 0;
}
これはリンクの問題のようです。誰かが私が間違っていることを知っていますか?