使用struct变量时链接器错误

时间:2012-05-08 06:25:49

标签: c linker

当我尝试编译下面的程序时,我收到一个链接器错误:

/tmp/ccAikIsV.o    undefined reference to uvlc_encode_blockline

我有所有结构video_controller_t ..等声明和typedefed

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; 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} };

3 个答案:

答案 0 :(得分:0)

链接器抱怨对函数的未解析引用,而不是结构。您应该将链接器传递给包含此函数的目标文件或库,或者在当前编译单元中定义它。

答案 1 :(得分:0)

链接器错误的可能性很小 -

1 - 如果您未能在链接过程中包含所有必需的目标文件。

2 - 如果类,函数或变量有多个定义。

所以检查一下。

答案 2 :(得分:0)

你告诉编译器函数uvlc_encode_blockline()存在于某个地方,但是当链接器去寻找它时,它实际上找不到它 - 所以它抱怨它无法找到它。 / p>

声明足以让源文件编译为目标代码。要链接程序,您实际上必须定义函数并将包含定义的目标文件与引用它的目标文件链接。