【问题标题】:How to compile and link header file in C++? [duplicate]如何在 C++ 中编译和链接头文件? [复制]
【发布时间】:2014-10-04 16:03:08
【问题描述】:

我正在尝试使用 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"

以及在main() 函数中调用gpio_lib 函数,如sunxi_gpio_initsunxi_gpio_output

但是,如果我尝试通过

编译和链接 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的正确方法是什么?

【问题讨论】:

  • 你还需要链接gpio库。
  • 问题是:如何?
  • 将文件 gpio_lib.c 添加到您的项目中,至少:-}
  • 这就是答案:我也需要实现。谢谢! :)

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


【解决方案1】:

编译链接对应的源文件

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

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

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

【讨论】:

  • @OP;这是发帖时唯一正确的答案。
  • 对,这是正确的答案。谢谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    通过包含标题#include "gpio_lib.h",您可能带来了一些函数声明。由于标头在 C 中,您应该在 #include 定义之前添加链接说明符

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-09-04
      • 2012-06-08
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多