我正在尝试使用cpputest构建一个简单的单元测试可执行文件。我已将cpputest框架构建到静态库中,现在正尝试将其链接到可执行文件中。但是,由于相关的代码,我被绑定到一个相当复杂的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吗?
答案 0 :(得分:60)
您可能需要链接C ++支持运行时库。当你调用g ++时会自动发生这种情况。在linux上,这是通过向链接器添加-lstdc ++标志来实现的。你必须弄清楚如何在你的平台上做同样的事情。
答案 1 :(得分:7)
您的问题中的信息很少,但看起来某些代码使用某种形式的展示位置新,而特殊operator new
是 声明 (编译器找到它并使用它编译代码),链接器找不到 定义 。
(由于我的这个旧答案似乎仍然受到关注:请参阅here,了解有关声明与定义的广泛讨论。)
答案 2 :(得分:4)
您需要从头开始重建代码,包括库。我收到此错误是因为我无意中将在另一台机器上编译的目标文件(与源的其余部分)复制到我的机器上。这很可能会干扰链接步骤,因为现在有两种类型的目标文件,原生(对于已修改的源文件)和非本机(所有其他)。我猜这里,但运算符'new'意味着在不同的架构上略有不同,这就是你得到这个错误的原因。
P.S。我知道这对于一个有用的答案来说已经太晚了,但我仍然会将其记录在案。
答案 3 :(得分:2)
也许您正在调用NSRunningApplication.current.hide()
,C编译器而不是gcc
,这是C ++编译器。
答案 4 :(得分:0)
对于QNX 6.5.0,我为-lang-c++
(qcc
)指定了标记gcc
以避免错误。
答案 5 :(得分:0)
就像原来的帖子一样,在我的例子中,这个错误是在尝试使用 CppUTest 框架链接软件时发生的。
就我而言,问题的根源似乎与我禁用了 CppUTest 的 MEMORY_LEAK_DETECTION 编译选项有关。我再次启用它,问题解决了。