在C中使用C标头

前端之家收集整理的这篇文章主要介绍了在C中使用C标头前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经搜索了谷歌,并发现你使用了
extern "C" {
#include "header.h"
}

要在C库中包含C库…但是,当我这样做时. C程序似乎拿起了我所有的#defines和struct定义,但没有一个函数声明给我带来了对`function’的未定义引用.

这是我正在使用的最小量的src.

json.h

//json.h
typedef struct json_object json_object;
struct json_object {
    char key[15][50];
    int size;
    char value[15][50];
};
void json_parseText(char * text,struct json_object *jo);

TEST.CPP

//test.cpp
extern "C" {
    #include "json.h"
}

int main() {
    struct json_object jo;
    char * keyVal;
    char * text = "{ \"MsgType\": \"article\" }";

    json_parseText(text,&jo);
}

g产生以下结果:

test.cpp:(.text+0x2c): undefined reference to `json_parseText'

注意它没有抱怨结构定义,所以它似乎从头文件中得到了.但不是功能.这令我感到困惑.我以前从未使用过C,但对于我的测试框架,它必须在C中.如果您对如何解决这个问题有任何想法,请告诉我.谢谢.

解决方法

这是一个链接错误.换句话说,你的C编译器选择了你的标题;你忘记了与你的图书馆联系.

现在,您告诉编译器存在这样的函数和结构,但不能找到它们的位置.

对于共享库(.so),您必须将-l [lib name]传递给G;您可能还必须在库搜索路径中指定其他文件夹,因为-l需要文件名(不带扩展名)而不是路径.对于静态库(.a),您必须在要编译的文件中包含其路径.

猜你在找的C&C++相关文章