27

ccptest を使用して、単純な単体テスト実行可能ファイルを作成しようとしています。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 を取得できませんか?

4

6 に答える 6

71

おそらく、C++ サポート ランタイム ライブラリとリンクする必要があります。これは、g++ を呼び出すと自動的に行われます。Linux では、-lstdc++リンカーにフラグを追加することで実現されます。プラットフォームで同じことを行う方法を理解する必要があります。

于 2010-09-17T14:05:16.870 に答える
8

あなたの質問にはほとんど情報がありませんが、いくつかのコードが何らかの形式の配置 newを使用しているように見えます.その特別なoperator newものが宣言されている間(コンパイラはそれを見つけて、それを使用してコードをコンパイルします)、リンカはその定義

(私のこの古い答えはまだ注目を集めているようです。宣言と定義に関する広範な議論については、こちらを参照してください。)

于 2010-09-17T13:59:11.453 に答える
4

ライブラリを含め、コードを最初から再構築する必要があります。このエラーが発生したのは、別のマシンでコンパイルされたオブジェクト ファイルを (残りのソースと共に) 自分のマシンに誤ってコピーしたためです。ネイティブ (変更されたソース ファイル用) と非ネイティブ (その他すべて) の 2 種類のオブジェクト ファイルが存在するため、おそらくこれがリンク手順を妨害します。私はここで推測していますが、演算子「new」は異なるアーキテクチャではわずかに異なることを意味するため、このエラーが発生しています。

psこれは有用な回答には遅すぎることはわかっていますが、記録のためにまだ投稿しています。

于 2012-06-12T06:43:32.340 に答える