VS2015(VC14)

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日強

 

_MSC_VERの一覧(2015年版)

VisualStudio2015の導入に関して、_MSC_VERが気になったので情報をまとめてみるとこんな感じ。

_MSC_VER _MSC_FULL_VER VC Ver. Memo
600 --- --- C/C++Compiler 6.0
700 --- --- C/C++Compiler 7.0
800 --- VC1.0 ---
900 --- VC2.0 ---
1000 --- VC4.0 ---
1010 --- VC4.1 ---
1020 --- VC4.2 ---
1100 --- VC5.0 Visual Studio 97
1200 12008804 VC6.0 Visual Studio 6.0
1300 13009466 VC7.0 Visual Studio.net 2002
1310 13102292 VC7.1 Visual Studio.net 2003
1400 140050320 VC8.0 Visual Studio 2005
1400 140050727 VC8.0 Visual Studio 2005 SP1
1500 150021022 VC9.0 Visual Studio 2008
1500 150030729 VC9.0 Visual Studio 2008 Update1
1600 160030319 VC10.0 Visual Studio 2010
1600 160040219 VC10.0 Visual Studio 2010 Update1
1700 170050727 VC11.0 Visual Studio 2012
1700 170051106 VC11.0 Visual Studio 2012 Update1
1700 170060315 VC11.0 Visual Studio 2012 Update2
1700 170060610 VC11.0 Visual Studio 2012 Update3
1700 170061030 VC11.0 Visual Studio 2012 Update4
1800 180021005 VC12.0 Visual Studio 2013 RTM / Update1
1800 180030501 VC12.0 Visual Studio 2013 Update2
1800 180030723 VC12.0 Visual Studio 2013 Update3
1800 180031101 VC12.0 Visual Studio 2013 Update4
1800 180040629 VC12.0 Visual Studio 2013 Update5
1900 190023026 VC14.0 Visual Studio 2015
1900 190023506 VC14.0 Visual Studio 2015 Update1
1900 190023918 VC14.0 Visual Studio 2015 Update2
1900 190024210 VC14.0 Visual Studio 2015 Update3
で、VC13が存在しないことに気づいたので調べてみると、「縁起が悪いから避けた」とのこと。
VC4以降であれば (VC++のバージョン + 6)×100 (例:VC7.1のとき (7.1+6)×100=1310)で計算できたのが、今後はVC12前後で処理を分けるとか考える必要があるのかー。
まぁ、決め打ちなのでわけないけどね。
<参考>

Visual Studio 2015でOpenCV3.0.0

これまでVS2008を使ってきたけどOpenCV3.0.0(以降OpenCV3)を使うためにVS2015をインストールしてみた。
ら、OpenCV3同梱はVS2012(VC11)とVS2013(VC12)用ライブラリでVS2015(VC14)は無いことが判明。(→OpenCV3.2(2016/12/23版)にはVS2015(VC14)ライブラリが付いているので、この記事は参考かなー)
なので、自前で準備したのでメモ。
1.OpenCV3の入手
http://opencv.org/   2015/6/4を使用
2.CMakeでプロジェクトの作成
3.CMakeオプションの変更
 「WITH__OPENCL」がデフォルトでONになっているのでチェックを外す。(Offへ変更)
  デフォルトのままだと、下記エラー等が発生する。

C2264 'std::tuple<cv::size,perf::`anonymous-namespace'::matdepth>::tuple': error in function definition or declaration; function not called opencv_perf_core E:\OpenCV\Source\modules\core\perf\opencl\perf_channels.cpp 165

 
4.VS2015(VC14)でビルド
 プロジェクトロード後「ALL_BUILD」からビルドで各種libをGetだぜ
あ、同じ要領でVS2008用を作成すればいいことに今気づいた・・・。

カレンダー

  • 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