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++を使って無料で新しいオペレーターを取得しませんか?
あなたの質問には作業するための情報がほとんどありませんが、一部のコードはplacement newの形式を使用しているようですが、その特別なoperator new
isdeclared(コンパイラがそれを見つけて、それを使用してコードをコンパイルします)、リンカは定義が見つかりません。
(私の古い答えはまだ注目されているようですので、宣言と定義の詳細については ここ を参照してください。)
おそらく、C++サポートランタイムライブラリとリンクする必要があります。これは、g ++を呼び出すと自動的に行われます。 Linuxでは、これはリンカーに-lstdc ++フラグを追加することで実現されます。あなたはあなたのプラットフォームで同じことをする方法を理解する必要があります。
ライブラリを含め、コードを最初から再構築する必要があります。このエラーが発生したのは、別のマシンでコンパイルされたオブジェクトファイルを(残りのソースとともに)自分のマシンに誤ってコピーしたためです。ネイティブ(変更されたソースファイル用)と非ネイティブ(その他すべて)の2種類のオブジェクトファイルが存在するため、これはリンク手順を妨げる可能性があります。私はここで推測していますが、「新しい」という演算子は、アーキテクチャが異なると少し異なることを意味するため、このエラーが発生します。
pSこれは有用な回答には遅すぎることはわかっていますが、これを記録するためにまだ投稿しています。
たぶん、C++コンパイラであるg++
ではなく、Cコンパイラであるgcc
を呼び出しているでしょう。
QNX 6.5.0の場合、エラーを回避するためにqcc
(gcc
)にフラグ-lang-c++
を指定しました。