Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用结构变量时发生链接器错误_C_Linker - Fatal编程技术网

C 使用结构变量时发生链接器错误

C 使用结构变量时发生链接器错误,c,linker,C,Linker,当我试图编译下面的程序时,我得到一个链接器错误: /tmp/ccAikIsV.o undefined reference to uvlc_encode_blockline 我有所有的视频控制器。。etc声明和类型定义 int uvlc_encode_blockline(struct video_controller_t* controller, const struct vp_api_picture_t* blockline, bool_t picture_complete );

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

/tmp/ccAikIsV.o    undefined reference to uvlc_encode_blockline
我有所有的视频控制器。。etc声明和类型定义

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)(结构视频控制器、常量结构vp_api_picture_t*块线、bool_picture_complete); 并在下面的struct中使用它 typedef struct\u video\u codec\u t{encode\u blockline\u fc encode\u blockline;decode\u blockline\u fc decode\u blockline;update\u fc update;cache\u stream\u fc cache\u stream;}video\u codec\t

如果以下语法有任何错误,请告知我: 常量uvlc_编解码器\u t uvlc_编解码器={ uvlc_编码_块线, uvlc_解码_块线, uvlc_更新, uvlc_缓存, { 0 }
};

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

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

1-如果链接过程中没有包含所有必要的对象文件

2-如果一个类、函数或变量有多个定义


所以检查它。

您已经告诉编译器函数
uvlc\u encode\u blockline()
存在于某个地方,但是当链接器去寻找它时,它实际上找不到它-所以它抱怨找不到它


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

函数在哪里:uvlc\u encode\u块线、uvlc\u decode\u块线、uvlc\u update、uvlc\u cache?语法没有问题。如果有,您将不会得到链接器错误;您将得到一个编译器错误。我们可以争辩说,结构标记上不应该有一个前导下划线(以下划线开头的标识符是为“实现”保留的),但这是次要的,许多人蔑视这一规则,当然要冒自己的风险。问题根本不在于语法。问题是链接器找不到您告诉它用于在结构中提供函数指针的函数。它在哪个文件中实现?为什么你还没有链接那个文件?Irc,const修饰符在C++中的行为不同。你是否有可能用C++编译器编译?嗨,Wildplasser,我使用的不是GC+G+。所以我想知道语法常量uvlc\u编解码器\u t…另外,如果是链接器错误,它应该投诉typedef C\u结果(encode\u blockline\u fc)(结构视频控制器\u t控制器,结构vp\u api\u picture\u blockline,bool\u picture\u complete);未定义函数编码\块线\ fc时。但在这一点上,你并不同意。但当我做类似的事情时,我没有得到任何错误。我声明了函数指针typedef C_RESULT(encode_blockline_fc)(结构视频控制器、常量结构vp_api_picture_t*块线、bool_t picture_complete);并在typedef struct(结构)下的struct(视频)编解码器(编码)块线(blockline)(解码)块线(blockline)(解码)(blockline)解码(blockline)(解码)块线;