kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

Boost.Testの利用で変な風にはまる

Boost.Testを使い始めようと試していたら、次のエラーが出て、詰まっていました。

LINK : fatal error LNK1561: 
  エントリー ポイントを定義しなければなりません。

ソースは次のとおりの簡単なもの。

#define BOOST_TEST_MODULE unit_test
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(suite);

BOOST_AUTO_TEST_CASE(test) {
  BOOST_CHECK_EQUAL(2 + 2, 5);
}

BOOST_AUTO_TEST_SUITE_END();

そのまんま、main関数が無いよってことなんですが、不要なはずだし、念のため定義してやると今度はテストが実行されない。

同じコードでMacは問題なし。staticだdynamicだって違いがあるので、一応dllを作ってみたらそちらは問題なし。ただ、MacではNGって話はあっても、Windowsではってのは無かったので、納得いかなかったのですが、別件でVisual Studioの設定を変えたら、突然動作するようになったり。

で、改めて見比べたら、次のリンカー(のサブシステム)の設定が空に原因だったことが判明(下は修正したもの)。

f:id:kkAyataka:20130728123710p:plain

ただ、これ、そもそもVisual Studioの既定のテンプレートからコンソールアプリを作った場合は問題ない設定になっています。空になっていたのは、私が自前で用意したカスタムウィザードから作った影響でして。

カスタムウィザードはデフォルトでほとんど設定が入らないので、明示的に指定する必要があるんだけど、種々の理由からすべてを設定するのは結構難しい。それで、必要最低限(と思われる)設定で取り回していたのだけれど、今回はそれが仇となりました。