0

以下のプログラムをコンパイルしようとすると、リンカ エラーが発生します。

/tmp/ccAikIsV.o    undefined reference to uvlc_encode_blockline

私はすべての構造体 video_controller_t .. などを宣言し、typedef しています。

int uvlc_encode_blockline(struct video_controller_t* controller, const struct    vp_api_picture_t* blockline, bool_t picture_complete );
int uvlc_decode_blockline(struct video_controller_t* controller,struct vp_api_picture_t* picture, bool_t* got_image );
int uvlc_update( struct video_controller_t* controller );
int uvlc_cache( struct video_controller_t* controller,struct video_stream_t* ex_stream);

const uvlc_codec_t uvlc_codec = {
uvlc_encode_blockline,
uvlc_decode_blockline,
uvlc_update,
uvlc_cache,
{ 0 }
};

誰か提案があれば教えてください。


アップデート

関数を定義して、リンカーに取得して使用するように指示する必要があることに同意します。同様のことをしたとき、エラーは発生しませんでした。関数ポインタを宣言しました:

typedef C_RESULT (encode_blockline_fc)(struct video_controller_t controller,
                                       const struct vp_api_picture_t* blockline,
                                       bool_t picture_complete);

以下の構造体で使用しました:

typedef struct _video_codec_t
{
    encode_blockline_fc encode_blockline;
    decode_blockline_fc decode_blockline;
    update_fc update;
    cache_stream_fc cache_stream;
} video_codec_t;

以下の構文に誤りがある場合はお知らせください。

const uvlc_codec_t uvlc_codec = {
uvlc_encode_blockline,
uvlc_decode_blockline,
uvlc_update,
uvlc_cache,
{ 0 }
};

関数を定義して、リンカーに取得して使用するように指示する必要があることに同意します。同様のことをしたとき、エラーは発生しませんでした。関数ポインター typedef C_RESULT (encode_blockline_fc)( struct video_controller_t controller, const struct vp_api_picture_t* blockline, bool_t picture_complete ); を宣言しました。typedef struct _video_codec_t { encode_blockline_fc encode_blockline; の下の構造体で使用しました。デコード_ブロックライン_fc デコード_ブロックライン; update_fc 更新; cache_stream_fc cache_stream; }video_codec_t

以下の構文に誤りがある場合はお知らせください: const uvlc_codec_t uvlc_codec = { uvlc_encode_blockline, uvlc_decode_blockline, uvlc_update, uvlc_cache, { 0 } };

4

3 に答える 3

0

関数がどこかに存在することをコンパイラに伝えましたuvlc_encode_blockline()が、リンカがそれを探しに行くと、実際にはそれを見つけることができません。

この宣言は、ソース ファイルをオブジェクト コードにコンパイルするのに十分です。プログラムをリンクするには、実際に関数を定義し、その定義を含むオブジェクト ファイルをそれを参照するオブジェクト ファイルにリンクする必要があります。

于 2012-05-08T06:38:53.173 に答える