« 2019年6月 | トップページ

2019年11月

LNK2038:'boost__type_index__abi' エラー@VS2015

<現象>

  • 特定のVS2008で過去に作成したプロジェクトをVS2015へ更新したら、「LNK2038:'boost__type_index__abi' エラー」発生。
  • Boost 1.67を使用していたのでBoost 1.72へ更新したが同様のエラーで実行できず。

<原因>

  • StdAfx.h等で「#define BOOST_NO_TYPEID」を設定していたプロジェクトだったのが原因
  • VS2015へ変換したVS2008プロジェクトのうち、上記エラーが発生しないものは、上記defineを使用していない。

<対策>

  • #define BOOST_NO_TYPEID をプロジェクト内で検索&削除した後、リビルドにてエラー消滅を確認。
  • ->恐らくVS2008のときにTYPEIDを含むBoostコードのエラー回避で定義していた模様。
  • 同様に、BOOST_NO_RTTIやBOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY を有効にしたプロジェクトでもエラーとなる(と思う)。

<参考>

  • visualc.hpp :ここでVS2010以降の場合、BOOST_HAS_PRAGMA_DETECT_MISMATCHが定義される。
  • type_index.hpp :ここでMSVCかつBOOST_NO_RTTIかつBOOST_HAS_PRAGMA_DETECT_MISMATCHのときもれなくエラー。(探していないがBOOST_NO_TYPEIDの場合、どこかでBOOST_NO_RTTIが有効になる模様)
  • VS2008はBOOST_HAS_PRAGMA_DETECT_MISMATCHが有効でないため、エラーにはならない。

<今回のトラブルから得られたこと>

  • 早い段階でtype_index.hppにたどり着いていたが、Boost側の問題と思い込んだのが敗因。
  • type_index.hppのエラー出力箇所のマクロ(BOOST_HAS_PRAGMA_DETECT_MISMATCH等)定義箇所を探すのが近道か。
  • VisualStudioの検索「ソリューション全体(外部アイテムを含む)」が超優秀なことが判ったのが収穫。ライブラリも検索できるのは超助かる。
  • 強制的にBoost1.72適応&b2 コンパイルオプション対応 が進んだので良しとしてみる。

<悩んだ時間>

  • 1日強

 

« 2019年6月 | トップページ

カレンダー

  • keisan
無料ブログはココログ
2019年11月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30