c++ - 在 C++ 中使用 C 头文件

标签 c++ c linker header-files

我在谷歌上搜索了这个,发现你使用

extern "C" {
#include "header.h"
}

将 C 库包含在 C++ 库中……但是,当我这样做时。 C++ 程序似乎获取了我所有的#defines 和结构定义,但没有任何函数声明给我留下对“函数”的 undefined reference 。

这是我使用的最少量的 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);

测试.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++ 编译器正确地选择了您的 header ;你只是忘了链接到你的图书馆。

现在,您告诉编译器此类函数和结构存在,但不知道在哪里可以找到它们。

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

关于c++ - 在 C++ 中使用 C 头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7127476/

相关文章:

c++ - vector 消失

带参数的 C++ 简单线程(无 .net)

C++ 节点和链表语法

c++ - GCC 链接器 : staticA can't see staticB while linking other shared library

c++ - 尽管存在符号链接(symbolic link),ld 仍无法加载库

C++ boost 或 STL `y += f(x)` 类型算法

c - 局部变量地址用作 errno

在 OpenCV 中创建 XML 文件

c - Scanf 不要在循环中第二次扫描 char,有什么想法吗?

c++ - 链接 Objective-C++