Ste*_*ven 6 c c++ linker header-files
我已经搜索了谷歌,并发现你使用了
extern "C" {
#include "header.h"
}
Run Code Online (Sandbox Code Playgroud)
要在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);
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
g ++产生以下结果:
test.cpp:(.text+0x2c): undefined reference to `json_parseText'
Run Code Online (Sandbox Code Playgroud)
注意它没有抱怨结构定义,所以它似乎从头文件中得到了.但不是功能.这令我感到困惑.我以前从未使用过C++,但对于我的测试框架,它必须是C++.如果您对如何解决这个问题有任何想法,请告诉我.谢谢.
zne*_*eak 16
这是一个链接时错误.换句话说,你的C++编译器可以选择你的标题; 你忘记了与你的图书馆联系.
现在,您告诉编译器存在这样的函数和结构,但不能找到它们的位置.
对于共享库(.so),您必须传递-l[lib name]给G ++; 您可能还需要在库搜索路径中指定其他文件夹,因为-l需要文件名(不带扩展名)而不是路径.对于静态库(.a),您必须在要编译的文件中包含其路径.