繁体   English   中英

未定义对 operator new 的引用

[英]Undefined reference to operator new

我正在尝试使用 cputest 构建一个简单的单元测试可执行文件。 我已将 cpputest 框架构建到 static 库中,现在正尝试将其链接到可执行文件中。 但是,由于相关代码,我被绑定到一个相当复杂的 Makefile 设置中。

这是我的命令行:

/usr/bin/qcc -V4.2.4,gcc_ntoarmle_acpp-ne -lang-c++ -O2 -g -g -o Application/UnitTests/Tests/symbols/UnitTestExe -Wl,--start-group Application/UnitTests/Tests/../.objs/main.o Application/UnitTests/lib/libcpputest.a -Wl,--end-group -lm 

我收到很多错误,如下所示:

 Application/UnitTests/lib/libcpputest.a(CommandLineTestRunner.o): In function `CommandLineTestRunner::parseArguments(TestPlugin*)':
   Application/UnitTests/cpputest/src/CppUTest/.objs/../CommandLineTestRunner.cpp:114: undefined reference to `operator new(unsigned int, char const*, int)'

我无法弄清楚是什么原因造成的。 我不是用 C++ 免费获得 operator new 吗?

您可能需要链接 C++ 支持运行时库。 当您调用 g++ 时,这会自动发生。 在 Linux 上,这是通过向链接器添加-lstdc++标志来实现的。 你必须弄清楚如何在你的平台上做同样的事情。

有没有在你的问题,从工作的信息非常少,但它看起来像一些代码使用某种形式安置新的,虽然是特殊的operator new声明(编译器发现它并使用它编译的代码),链接器不能找到它的定义

(因为我的这个旧答案似乎仍然受到关注:有关声明与定义的广泛讨论,请参见此处。)

也许您正在调用gcc (C 编译器)而不是g++ ,后者是 C++ 编译器。

您需要从头开始重建代码,包括库。 我收到此错误是因为我无意中将在另一台机器上编译的目标文件(以及其余的源代码)复制到了我的机器上。 这很可能会干扰链接步骤,因为现在有两种类型的目标文件,本地(用于修改的源文件)和非本地(所有其他)。 我在这里猜测,但是运算符“new”在不同架构上的含义略有不同,这就是您收到此错误的原因。

ps我知道这对于有用的答案来说太晚了,但我仍在发布此记录以供记录。

对于 QNX 6.5.0,我为qcc ( gcc ) 指定了标志-lang-c++以避免错误。

就像原来的帖子一样,在我的例子中,这个错误是在尝试使用 CppUTest 框架链接软件时发生的。

就我而言,问题的根源似乎与我禁用了 CppUTest 的 MEMORY_LEAK_DETECTION 编译选项有关。 我再次启用它,解决了问题。

有时添加-lstdc++是不够的。 您应该将其添加到正确的位置。 例如,我有这样的列表,不起作用:

target_link_libraries(cfr2 pthread m stdc++ "${CMAKE_SOURCE_DIR}/compressor/libcompressor.a" )

但是这个工作正常:

target_link_libraries(cfr2 pthread m "${CMAKE_SOURCE_DIR}/compressor/libcompressor.a" stdc++)

如果有人在评论部分解释它会很棒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM