对运算符new的未定义引用

mby*_*215 22 c++ linker gcc

我正在尝试使用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 
Run Code Online (Sandbox Code Playgroud)

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

 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)'
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚造成这种情况的原因.我不是用C++免费获得operator new吗?

zvr*_*rba 62

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


sbi*_*sbi 8

你的问题中的信息很少,但看起来有些代码使用某种形式的placement new,虽然声明了这种特殊operator new的东西(编译器找到它并使用它编译代码),但是链接器找不到它定义.

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

  • 你是对的; 我非常想知道为什么标准的库不起作用,我没有密切关注第三方库.它正在秘密地重新定义新的.我删除了那部分,一切都很好.谢谢. (2认同)

Sha*_*ron 8

也许您正在调用gccC 编译器而不是g++C++ 编译器。