【问题标题】:g++ 'undefined reference' error when function is already defined [duplicate]已定义函数时的g ++“未定义引用”错误[重复]
【发布时间】:2020-07-01 17:30:36
【问题描述】:

我有一个静态库libmylib.a,其中包含许多预编译对象。这些对象的所有头文件都存储在/path/to/includes/ 中。我正在编译我的主脚本 BACnetSearch.cpp 使用 g++ 与下面的行:

g++ BACnetSearch.cpp -I/path/to/includes/ -L/path/to/libraries/ -lmylib

库中使用的所有函数都可以工作,除了一个函数,它给出了undefined reference to 'function_name'。我检查了该函数是否已在适当的头文件中实例化,存在于库中的对象中,并且已将其包含在脚本的顶部。该库是 BACnet,因此假设该版本没有错误,我该从哪里着手解决这个问题。

您需要的任何其他信息只需询问我会尝试添加。谢谢:)

编辑:收到错误消息:

/tmp/ccDIISDz.o: In function `main':
BACnetSearch.cpp:(.text+0x67e): undefined reference to `bvlc_receive'
collect2: error: ld returned 1 exit status

编辑 2:在其他地方自动标记为已回答,然后链接到具有太多可能问题的通用问题。唯一的可能是在编译库时,编译脚本的顺序会导致此错误基于脚本相互依赖。

【问题讨论】:

  • 请将错误信息(逐字)添加到您的问题中。
  • mylib 是 C 还是 C++ 库?
  • @Eljay C++,使用 MakeFiles 用 gcc 编译(全部由 BACnet 开发者创建)
  • @S_Zizzle 通常 gcc 将用于编译 C 代码,而 g++ 用于 C++ 代码。
  • 嗯,我从来没有用 gcc 编译过 C++,在它真正编译之前?因为它不应该???

标签: c++ linker include g++ static-libraries


【解决方案1】:

您始终可以从检查该功能是否已实现开始。像这样定义原型是一个常见的错误:

int isLarger();

永远不要实现这个函数,在这种情况下你会得到 isLarger is not defined 错误......

查看他们的网站,也许您应该使用 make 文件编译代码,如下所示:

make BACDL_DEFINE=-DBACDL_MSTP=1 clean all

【讨论】:

  • 我已经检查了gets内置到库中的源代码,并且该函数确实存在于库中。
  • 您添加的 make 命令只是清理 make 文件,它不会构建任何东西(最后由 clean all 表示)。 BACDL_DEFINE=-DBACDL_MSTP=1 只是告诉 BACnet make 文件使用 Master-Slave Token Pass (MSTP),这不是我想要的。感谢您抽出宝贵时间:)。
猜你喜欢
  • 1970-01-01
  • 2017-05-27
  • 2022-05-03
  • 1970-01-01
  • 2016-12-09
  • 2021-06-08
  • 2013-03-06
  • 2011-08-28
相关资源
最近更新 更多