我正在尝试使用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_output
和main()
。
但是,如果我尝试通过
编译和链接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
的正确方法是什么?
答案 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