如何在C ++中编译和链接头文件?

时间:2014-10-04 16:03:08

标签: c++ c compilation linker header-files

我正在尝试使用cubietruck的gpio_lib。因此,我得到了gpio_lib.h(请参阅https://github.com/youyudehexie/node-cubieboard-gpio/blob/master/lib/gpio_lib.h)文件,该文件位于我的工作目录中:

> l
gpio_lib.h
test.cpp

在我的test.cpp我有以下内容:

#include "gpio_lib.h"

并在sunxi_gpio_init函数中调用gpio_lib函数,如sunxi_gpio_outputmain()

但是,如果我尝试通过

编译和链接send.cpp
> g++ -o test -O3 -Wall test.cpp

我得到了

/tmp/ccULAi2f.o: In function `sequence_up()':
test.cpp:(.text+0x26a): undefined reference to `sunxi_gpio_output(unsigned int, unsigned int)'
/tmp/ccULAi2f.o:test.cpp:(.text.startup+0xa2): more undefined references to `sunxi_gpio_output(unsigned int, unsigned int)' follow
collect2: error: ld returned 1 exit status

我也尝试跟着调用得到同样的错误:

> g++ -o test -O3 -Wall gpio_lib.h test.cpp
> g++ -o test -O3 -Wall -I. -L. gpio_lib.h test.cpp

编译和链接test.cpp的正确方法是什么?

3 个答案:

答案 0 :(得分:4)

编译并链接相应的源文件

g++ -o test test.cpp gpio_lib.c

由于标头是纯C,如果你从C ++中包含它,你需要自己添加语言链接:

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

答案 1 :(得分:2)

您无法链接头文件。您得到的错误是链接错误,即函数声明在.h文件中可用,因此它可以编译,但缺少函数的定义。您需要找到正确的库并与

链接

答案 2 :(得分:2)

通过包含标题#include "gpio_lib.h",您可能已经带来了一些函数声明。由于标头位于C中,因此您应在#include定义

之前添加链接说明符
extern "C" {
    #include "gpio_lib.h"
}

提供适当的联系。然后你必须链接到这些函数的定义(正文)的二进制文件,或者要求gcc(g ++是gcc模块)为你做所有的事情:

g++ -o test test.cpp gpio_lib.c