2013/11/23

VC++で「fatal error LNK1104: cannot open file 'kernel32.lib'」となった時の解決方法

VC++2010でコンパイルすると
fatal error LNK1104: cannot open file 'kernel32.lib'
となってしまうことがありました.

ググってみると,
どうやらWindowsSDKの中にkernel32.libがあるので,そこのパスを通してあげればいいようです,
しかし,VC++のライブラリディレクトリを確認すると,
$(WindowsSdkDir)libが,
ヘッダーのディレクトリを確認すると
$(WindowsSdkDir)includeが,
もう設定されていました.

しかし,エラーは出ているので,確認をしてみると,
環境変数で
 $(WindowsSdkDir)が設定されていませんでした.

$(WindowsSdkDir)を手動で環境変数を追加してもよかったのですが,
直接ファイルの場所をVC++のライブラリとインクルードのパスに追加してあげると,
エラーがなくなりました.

これでおkです.

参考にしたサイト
visual studio 2010 - fatal error LNK1104: cannot open file 'kernel32.lib' - Stack Overflow
http://stackoverflow.com/questions/15053337/fatal-error-lnk1104-cannot-open-file-kernel32-lib

c++ - LNK1104: cannot open file 'kernel32.lib' while linking openCV - Stack Overflow
http://stackoverflow.com/questions/18389115/lnk1104-cannot-open-file-kernel32-lib-while-linking-opencv

1>LINK : fatal error LNK1104: cannot open file 'kernel32.lib,'
http://social.msdn.microsoft.com/Forums/vstudio/en-US/3f4d7dcb-f06a-4b5b-80e1-07df9b452457/1link-fatal-error-lnk1104-cannot-open-file-kernel32lib?forum=vclanguage

visual studio 2010 - fatal error LNK1104: cannot open file 'kernel32.lib' - Stack Overflow
http://stackoverflow.com/questions/15053337/fatal-error-lnk1104-cannot-open-file-kernel32-lib

2013/11/19

「エラー: プロジェクトに "ConfigurationGeneral" 規則がありません。」とエラーになった時の解決方法

Visual Studio C++ 2010 でx64用にビルドをすると次のようなエラーになってしまい,ビルドすることができませんでした.
エラー: プロジェクトに "ConfigurationGeneral" 規則がありません。
ググると,次のようなサイトが出てきました.
VisualStudioビルド失敗:エラー[プロジェクトに "ConfigurationGeneral" 規則がありません。] - Blog
http://d.hatena.ne.jp/kudolf/20120121/1327119448

2011-05-07 - Diary of Chiharu - Chiharu の日記
http://d.hatena.ne.jp/chiharunpo/20110507

Visual C++ 2010 Expressでx64 Build - Blog.Takamin.net
http://d.hatena.ne.jp/takaminet/20120120/1327070733

どうやら,「Visual Studio 2010 Service Pack 1」と「Windows SDK for Windows 7 and .NET Framework 4」間で起こる既知の問題らしいです.

確かに,自分のPCはその両方をインストールしています.
Visual Studio 2010 Service Pack 1 で起こる問題についての最新情報
http://msdn.microsoft.com/ja-jp/visualc/gg697159

解決方法としては,ほかのサイトにも書いているように,修正プログラムをダウンロードして実行すればいいようです.
マイクロソフト公式ダウンロード センターから Windows SDK 7.1 用 Microsoft Visual C++ 2010 Service Pack 1 コンパイラ更新プログラム をダウンロード
http://www.microsoft.com/ja-jp/download/details.aspx?id=4422

自分の環境でも修正プログラムを実行した後はx64のビルドができるようになりました.

2013/11/17

Visual C++ 2010にfreeglutをインストール

ちょっと前ですが、WindowsにGLUTをインストールしました。

○○○○に怖いものなんてない!!: VC++2010でGLUTのインストール
http://kowaimononantenai.blogspot.jp/2012/10/vc2010glut.html

しかし、GLUTは長い間開発が止まっているようです。
その代わりに現在はfreeglutというものがGLUTを置き換えるような形で開発されているようです。

The freeglut Project :: About
http://freeglut.sourceforge.net/

GLUTにはない機能もあるらしいのでfreeglutをインストールします。


基本的に次のサイトを参考にしてインストールしました。

Windows で GLUT を使う準備をする
http://www.naturalsoftware.jp/blog/2901

freeglutのインストール - ge56@web
https://sites.google.com/site/ge56web/programming/introduction/work1

自分の環境で参考にしたサイトと違うところは
VisualStudio2010でバッチビルドをするときに32bitだけでバッチビルドしたことくらいです。

WinodwsでBoostをソースからインストール

これまでWindowsにboostをインストールする際には"BoostPro"を利用していました。

BoostPro Computing - Advanced C++ Support, Training, and Development - BoostPro
http://www.boostpro.com/

しかし、今回このページに行くと「開発終了」であるというアナウンスが出ていました。
BoostProはコンパイル済みのものをインストールできるので簡単でよかったのですが、
最新のBoostのバージョンは提供されていません。

よって、Boostをソースからインストールしたいと思います。

まず、Boostをダウンロードしてきます。現時点では1.55.0が最新版みたいです。zipで落としてくるのは重くて大変なので、解凍できるソフトをインストールしているなら7zあたりがいいと思います。
Boost Downloads
http://www.boost.org/users/download/

解凍をして任意の場所に置いておきます。
今回は次の場所に置きました。
C:\boost\boost_1_55_0

次にコマンドプロンプトを起動します。
しかし、これは通常のコマンドプロンプトではなく、VisualStudioでコンパイルしないといけないためVisualStudioに付属しているコマンドプロンプトを利用します。
今回はVisualStudio2010 ExpressでBoostを使いたいので

すべてのプログラム ->> MicroSoft Visual Studio 2010 Express ->> Visual Studio コマンドプロンプト(2010)

のコマンドプロンプトを開きます。

先ほど置いたファイルの場所に行き、
bootstrap.bat

をします。これはmakeでいうconfigureみたいなものみたいです。
 これを実行すると次のような表示が出てきます。
C:\boost\boost_1_55_0>bootstrap.bat
Building Boost.Build engine

Bootstrapping is done. To build, run:

    .\b2

To adjust configuration, edit 'project-config.jam'.
Further information:

    - Command line help:
    .\b2 --help

    - Getting started guide:
    http://boost.org/more/getting_started/windows.html

    - Boost.Build documentation:
    http://www.boost.org/boost-build2/doc/html/index.html
 これを見ても分かるように、つぎはb2.exeを実行するといいようです。
加えて、b2.exeを実行するときに一緒にオプションを指定してあげます。

どのようなオプションがあるかは--helpオプションで確認することができます。
このオプションをつけるとしたのような出力が出てきました。
C:\boost\boost_1_55_0>b2.exe --help
Boost.Build 2011.12-svn

Project-specific help:

  Project has jamfile at Jamroot

Usage:

  b2 [options] [properties] [install|stage]

  Builds and installs Boost.

Targets and Related Options:

  install                 Install headers and compiled library files to the
  =======                 configured locations (below).

  --prefix=<PREFIX>       Install architecture independent files here.
                          Default; C:\Boost on Win32
                          Default; /usr/local on Unix. Linux, etc.

  --exec-prefix=<EPREFIX> Install architecture dependent files here.
                          Default; <PREFIX>

  --libdir=<DIR>          Install library files here.
                          Default; <EPREFIX>/lib

  --includedir=<HDRDIR>   Install header files here.
                          Default; <PREFIX>/include

  stage                   Build and install only compiled library files to the
  =====                   stage directory.

  --stagedir=<STAGEDIR>   Install library files here
                          Default; ./stage

Other Options:

  --build-type=<type>     Build the specified pre-defined set of variations of
                          the libraries. Note, that which variants get built
                          depends on what each library supports.

                              -- minimal -- (default) Builds a minimal set of
                              variants. On Windows, these are static
                              multithreaded libraries in debug and release
                              modes, using shared runtime. On Linux, these are
                              static and shared multithreaded libraries in
                              release mode.

                              -- complete -- Build all possible variations.

  --build-dir=DIR         Build in this location instead of building within
                          the distribution tree. Recommended!

  --show-libraries        Display the list of Boost libraries that require
                          build and installation steps, and then exit.

  --layout=<layout>       Determine whether to choose library names and header
                          locations such that multiple versions of Boost or
                          multiple compilers can be used on the same system.

                              -- versioned -- Names of boost binaries include
                              the Boost version number, name and version of
                              the compiler and encoded build properties. Boost
                              headers are installed in a subdirectory of
                              <HDRDIR> whose name contains the Boost version
                              number.

                              -- tagged -- Names of boost binaries include the
                              encoded build properties such as variant and
                              threading, but do not including compiler name
                              and version, or Boost version. This option is
                              useful if you build several variants of Boost,
                              using the same compiler.

                              -- system -- Binaries names do not include the
                              Boost version number or the name and version
                              number of the compiler. Boost headers are
                              installed directly into <HDRDIR>. This option is
                              intended for system integrators building
                              distribution packages.

                          The default value is 'versioned' on Windows, and
                          'system' on Unix.

  --buildid=ID            Add the specified ID to the name of built libraries.
                          The default is to not add anything.

  --python-buildid=ID     Add the specified ID to the name of built libraries
                          that depend on Python. The default is to not add
                          anything. This ID is added in addition to --buildid.

  --help                  This message.

  --with-<library>        Build and install the specified <library>. If this
                          option is used, only libraries specified using this
                          option will be built.

  --without-<library>     Do not build, stage, or install the specified
                          <library>. By default, all libraries are built.

Properties:

  toolset=toolset         Indicate the toolset to build with.

  variant=debug|release   Select the build variant

  link=static|shared      Whether to build static or shared libraries

  threading=single|multi  Whether to build single or multithreaded binaries

  runtime-link=static|shared
                          Whether to link to static or shared C and C++
                          runtime.


Configuration help:

  Configuration file at C:\boost\boost_1_55_0\tools\build\v2\user-config.jam

  This file is used to configure your Boost.Build installation. You can modify
this file in place, or you can place it in a permanent location so that it
does not get overwritten should you get a new version of Boost.Build. See:

  http://www.boost.org/boost-build2/doc/html/bbv2/overview/configuration.html

for documentation about possible permanent locations.

General command line usage:

    b2 [options] [properties] [targets]

  Options, properties and targets can be specified in any order.

Important Options:

  * --clean Remove targets instead of building
  * -a Rebuild everything
  * -n Don't execute the commands, only print them
  * -d+2 Show commands as they are executed
  * -d0 Supress all informational messages
  * -q Stop at first error
  * --reconfigure Rerun all configuration checks
  * --debug-configuration Diagnose configuration
  * --debug-building Report which targets are built with what properties
  * --debug-generator Diagnose generator search/execution

Further Help:

  The following options can be used to obtain additional documentation.

  * --help-options Print more obscure command line options.
  * --help-internal Boost.Build implementation details.
  * --help-doc-options Implementation details doc formatting.

...found 1 target...
しかし、オプションをすべて指定しなくても、基本的には
b2.exe
とオプションなしで実行してもデフォルトで勝手に指定してくれます。
デフォルト以外の値にしたい時だけオプションをつけるといいです。
自分は次のようなオプションを付けました。
b2.exe toolset=msvc-10.0 -j8

自分の環境ではインストールするPCにVisualStudio2010以外にもVisualStudioがインストールされていて、このオプションをつけないとVisualStudio2010ではないものでコンパイルされてしまったので"toolset=msvc-10.0"で2010でのコンパイルを明示しました。
msvc-10.0の10.0のところは
VisualStudio2008 ->> msvc-9.0
VisualStudio2010 ->> msvc-10.0
VisualStudio2012 ->> msvc-11.0
VisualStudio2013 ->> msvc-12.0


のようにして好きなバージョンでコンパイルできます。
また、"-j"オプションはmakeでは定番ですが、コンパイルするときに並列処理で利用するコア数を指定しています。
数が多いほどコンパイルは早いですが、多くてもCPUのコア数程度にしましょう。

並列処理をしてもコンパイルにはある程度時間がかかります。

終わると次のような出力が出てきます。
The Boost C++ Libraries were successfully built!

The following directory should be added to compiler include paths:

    C:/boost/boost_1_55_0

The following directory should be added to linker library paths:

    C:\boost\boost_1_55_0\stage\lib
これを参考にVisual Studio 2010でインクルードディレクトリとライブラリディレクトリを追加しましょう。
これでおkです。

あとは何かしらネットで見つけたサンプルを実行してみましょう。



参考にしたサイト
Boost開発環境の構築 @Visual Studio 2010 SP1 - 堕(惰)プログラマ開発記録
http://d.hatena.ne.jp/godai_0519/20110520/1305895194

予定外 Windows環境へのBoostライブラリインストール
http://homepie.blog.shinobi.jp/vc--/windows%E7%92%B0%E5%A2%83%E3%81%B8%E3%81%AEboost%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

Visutal Studio で Boost C++ Libraries をビルドする - Life like a clown
http://d.hatena.ne.jp/tt_clown/20110323/1300886446#20110323f1

Boostライブラリのビルド方法 - boostjp
https://sites.google.com/site/boostjp/howtobuild

2013/11/16

DreamSparkを使ってVisual Studio Professional 2013を無料インストール(学生向け)

先日、Visual Studio 2013が公開されました。

インストールしようとしたときに「学生はVisual Studio Professional 2013を無料でインストールできる」という記事を見つけました。

【学生は無償】 最新のVisual Studio 2013 を早くも DreamSpark で提供開始! - マイクロソフト 開発者情報ブログ
http://windows-developer.hatenablog.jp/entry/2013/11/01/122130

 DreamSparkというのを経由すれば、学生ならばVisual Studio Professional 2013を無料でインストールできるらしいです。

今までは"Express"を使っていたのですが、無料で使うことができるのなら"Professional"のほうが様々な機能が追加されているのでProfessionalを使ってみようと思います。

以下でインストール方法などを大まかに説明していきたいと思います。


まず、下のURLにアクセスします。
Microsoft DreamSpark
https://www.dreamspark.com/Default.aspx

DreamSparkのアカウントを持っていないときは、まずアカウント登録をします。


アカウント登録をした後に、すぐ 学生であることを検証するページに行くので検証する方法を指定します。
自分は「学校を経由して検証を受けます」を指定して、
学校名を英語で検索するとよかったので、だいたいはこれでおkなのでしょうか。

これで登録は終わりです。
今度はダウンロードをします。





ダウンロードする種類を選択できるようなので
自分は「日本語」の「32bit」を選びました。
なぜか64bitはないみたいですね。
「32bit」の代わりに「32bit Web installer」を選ぶこともできます。
「32bit Web installer」は選択していないのでわかりませんが、
「32bit」だとISOファイルが、「32bit Web installer」だとEXEファイルがダウンロードできるのではないかと思います。



これでダウンロードが始まるのではなく、もう少し作業をしないといけないみたいです。
次の画像の上から書いてある通りにやっていきます。
これをそのままやるとファイルのダウンロードが始まります。
今回はISOイメージをダウンロードしたので、DVDなどに焼いたり、仮想ドライブソフトを使ったりしてインストールします。

インストールすると再起動を催促されるので再起動します。

これでおkです。

これからいろいろ使ってみようかと思います。

2013/11/12

std::accumulateでvectorの合計や平均値を出す(std::accumulateの第3引数について考察もあり)

配列やVectorなどの合計や平均値を求めたい場合に"std::accumulate"という関数を使うと比較的簡単に求められます.

これから,基本的な使い方と,自分がはまったところを説明します.
まず,簡単な使い方は下のコードを見てください.

#include <iostream>
#include <vector>
#include <numeric>

int main(void)
{
  std::vector vec;

  for( int i = 0; i <= 10; i++){
    vec.push_back( i );
  }
    std::cout << "sum = " << std::accumulate(vec.begin(), vec.end(), 0) << std::endl;
    std::cout << "avg = " << std::accumulate(vec.begin(), vec.end(), 0) / vec.size() << std::endl;
}

実行結果はこのようになります.

sum = 55
avg = 5

これを見るとわかると思いますが,
"std::accumulate"の第一引数には配列やVectorの足し始め,
第二引数には配列やVectorの足し終わりを書くと,
その間をすべて足した値が戻り値で帰ってくる.
for文を回して自分で足していくのはミスの元だし,コードが長くなってしまうので,こっちのほうがいいでしょう.

しかし,この関数には第三引数も入れる必要があり,上の例では"0"が入っています.
ネットのリファレンスなどを見るとこのように書いて有ります.
init           initial value of the sum 
std::accumulate - cppreference.com
http://en.cppreference.com/w/cpp/algorithm/accumulate

accumulate - C++ Reference
http://www.cplusplus.com/reference/numeric/accumulate/

つまり,「初期値」です,
この扱いについてはまってしまいました.

説明の前に次のコードを見てください.

#include <iostream>
#include <vector>
#include <numeric>

int main(void)
{
  std::vector<double> vec;

  for( double i = 0.9; i < 5;i++){
    vec.push_back( i );
    std::cout << i << std::endl;
  }

  std::cout << "##########" << std::endl;

  std::cout << "sum1 = " << std::accumulate(vec.begin(), vec.end(), 0) << std::endl;
  std::cout << "sum2 = " << std::accumulate(vec.begin(), vec.end(), 0.0) << std::endl;
  std::cout << "avg1 = " << std::accumulate(vec.begin(), vec.end(), 0) / vec.size() << std::endl;
  std::cout << "avg2 = " << std::accumulate(vec.begin(), vec.end(), 0.0) / vec.size() << std::endl;
}

これを実行すると次のようになります.
0.9
1.9
2.9
3.9
4.9
##########
sum1 = 10
sum2 = 14.5
avg1 = 2
avg2 = 2.9

まず,作っている配列についてですが,はじめに表示された数字がVectorに入っているので,
"std::accumulate"で合計を出したときに出てきて欲しい答えは
0.9 + 1.9 + 2.9 + 3.9 + 4.9 = "14.5"
です.
"sum2"は予想通り14.5になっていますが,
"sum1"は"10"になっています.
この2つの違いは第三引数が"0"か"0.0"かという事です.

つまり,第三引数のinitの値は合計を計算する際の型に関係するという事です.
"0.0"を入れると小数まで計算するという事なので,14.5という戻り値が帰ってきますが,
"0"を入れると整数で計算してしまうので,
0.9 + 1.9 + 2.9 + 3.9 + 4.9
ではなく,整数で丸めた
0 + 1 + 2 + 3 + 4 = 10
という答えが帰ってきてしまうのです.

なので,平均を出すときも合計が間違っているのでavg1は出てきて欲しい答えとは違ってきてしまいます.

よって,合計求める配列やVectorの要素が"int"なら0で良いですが,
"double"や"float"のときは0.0としましょう.

g++を実行するときファイル名とライブラリ指定などのオプションには書く順番がある?

タイトルをなんて書けばいいのかわからなかったので,わかりにくいタイトルになってしまっています.

とりあえず,g++やgccには"-l"でライブラリの指定をすることができます.
例えば,下のソースをコンパイルするときは

#include <iostream>
#include <math .h>

int main(void){
        std::cout << sin(30) << std::endl;
}

このようにコンパイルすることができます.

g++ math.cpp -lm     #ライブラリの指定がファイル名の後でも
g++ -lm math.cpp     #ファイル名の前でもいい

どちらのコマンドでもおkなので,
「別にファイル名と"-l"や"-I"などのオプションには順番は関係ないんだー」
と思っていました.

しかし,
今回Boostのthreadを使ってマルチスレッドを使用とした時に,次のソースをコンパイルしたら...

#include <iostream>
#include <boost/thread.hpp>

void thFunc(void)
{
        std::cout << "thread" << std::endl;
}

int main(void)
{
        boost::thread th(thFunc);
        std::cout << "main" << std::endl;
        th.join();
        return 0;
}

ファイル名がはじめのコマンドはおkでしたが,

g++ thread.cpp -lboost_thread     #これはおk

ファイル名が後のコマンドだとエラーになってしまいました...

g++ -lboost_thread thread.cpp     #これはエラー


#/tmp/ccXxcECw.o: In function `main':
#thread.cpp:(.text+0x65): undefined reference to `boost::thread::join()'
#thread.cpp:(.text+0x76): undefined reference to `boost::thread::~thread()'
#thread.cpp:(.text+0x8e): undefined reference to `boost::thread::~thread()'
#/tmp/ccXxcECw.o: In function `boost::detail::thread_data_base::thread_data_base()':
#thread.cpp:(.text._ZN5boost6detail16thread_data_baseC2Ev[_ZN5boost6detail16thread_data_baseC5Ev]+0x24): undefined reference to `vtable for boost::detail::thread_data_base'
#/tmp/ccXxcECw.o: In function `boost::thread::thread(void (*)(), boost::disable_if >, boost::thread::dummy*>::type)':
#thread.cpp:(.text._ZN5boost6threadC2IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE[_ZN5boost6threadC5IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE]+0x30): undefined reference to `boost::thread::start_thread()'
#/tmp/ccXxcECw.o: In function `boost::detail::thread_data::~thread_data()':
#thread.cpp:(.text._ZN5boost6detail11thread_dataIPFvvEED2Ev[_ZN5boost6detail11thread_dataIPFvvEED5Ev]+0x1f): undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
#/tmp/ccXxcECw.o:(.rodata._ZTIN5boost6detail11thread_dataIPFvvEEE[typeinfo for boost::detail::thread_data]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base'
#collect2: ld はステータス 1 で終了しました
これで数時間はまりました. 上の例のようにどちらでもおkだと思っていたので, 確かにmakefileなどにはファイル名が先に書いて有りますね. まあ,いい勉強になりました. g++やgccではライブラリの指定などのオプションよりもファイル名を先に書きましょう.

2013/11/08

FirefoxのキャッシュをRAMDISKにして高速化する

前回Chrome(Chromium)のキャッシュをRAMDISKにして高速化する方法を書きました。

●Windows
○○○○に怖いものなんてない!!: RAMディスクを用いてChromeのキャッシュをRAMに保存
http://kowaimononantenai.blogspot.jp/2012/09/ramchromeram.html

●Linux
○○○○に怖いものなんてない!!: RAMディスクを用いてChromiumのキャッシュをRAMに保存
http://kowaimononantenai.blogspot.jp/2012/09/ramchromiumram.html

しかし、今のデフォルトブラウザは"Firefox"になってしまったので、FirefoxのキャッシュをRAMDISK化したいと思います。

RAMDISKを作るところは上のサイトと同じなのでFirefox側の設定のみ書きます。

1)
RAMDISK内にFirefoxのキャッシュを置くためのフォルダを作る。

2)
Firefoxのアドレスを書くところに
about:config
と打つ。
「動作を保障できません。」というような感じの警告が出てきますが、「使用する」を押します。

3)
適当なところで右クリックをして
「新規作成」 -> 「文字列」
と進み、

設定名を
browser.cache.disk.parent_directory

文字列名を
先ほど作成したRAMDISK内のキャッシュフォルダ

を入力する。


これでおkです。

参考にしたサイト
【Firefox】cacheの保存場所をRamDiskにする方法 | ハルパス
http://blog.halpas.com/archives/833

2013/11/07

Windows7でWindows SDKのインストールする際に出るエラーの解決方法

Windows7 64bit環境で、Windows SDKをインストールするとエラーが出てしまいました。

インストーラーはここからとってきました
Download Microsoft Windows SDK for Windows 7 and .NET Framework 4 from Official Microsoft Download Center
http://www.microsoft.com/en-us/download/details.aspx?id=8279

Logを見ると最後のほうはこうなっています。
12:13:55 2013年11月7日: [SDKSetup:Error] Config_Products_Install: Windows SDK Setup (failed): Installation of the "Microsoft Windows SDK for Windows 7" product has reported the following error: Please refer to Samples\Setup\HTML\ConfigDetails.htm document for further information. Stack:    場所 SDKSetup.Product.ConfigureNewProduct(ManualResetEvent CancelEvent)       場所 SDKSetup.Product.SetupProduct(TaskMode taskMode, ManualResetEvent CancelEvent)       場所 SDKSetup.ProductCollection.SetupProducts(TaskMode taskMode, DownloadManager downloadManager, ManualResetEvent cancelEvent)       場所 SDKSetup.ConfigProducts.DoCurrentTask(TaskMode Task)

いろいろググると情報がありました。
Microsoft Windows SDK for Windows 7 and .NET Framework 4
http://social.msdn.microsoft.com/Forums/ja-JP/97f023ab-5083-476f-a0d3-773370497c53/microsoft-windows-sdk-for-windows-7-and-net-framework-4

Windows SDK for Windows 7.1 をインストールするとエラーが発生する - Microsoft.NET - Project Group
http://www.projectgroup.info/tips/Others/comm_0004.html

I can't install Microsoft Windows SDK for Windows 7 and .NET - Microsoft Community
http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/i-cant-install-microsoft-windows-sdk-for-windows-7/e6bd1572-b750-470d-beec-e904c6fedb87

調べてみると以下の2つが悪さをしているようです。
・Microsoft Visual C++ 2010 x86 Redistributable
・Microsoft Visual C++ 2010 x64 Redistributable


Windows SDKがインストールしようとしている上のソフトのバージョンよりも
元々入っているバージョンのほうが高いとエラーが起きるようです。

#確かDirectXSDKのインストールでも同じようなエラーがありました。
○○○○に怖いものなんてない!!: DirectX SDK June 2010 をインストールしたときに「Error Code S1023」となったら
http://kowaimononantenai.blogspot.jp/2013/07/directx-sdk-june-2010-error-code-s1023.html

Winodws SDKをインストールすると上の2つもインストールされるので(ちょっとバージョンが下がりますが、あまり問題ではありません。)
もともと入っているほうはアンインストールします。

そして、もう一度Windows SDKをインストールすると今度はうまくいくはずです。


#参考にしたサイトではこの作業を行っても別なエラーが出て、
#VisualC++ Compilerのインストールをするチェックを外せばできるようになったようですが、
#自分はこの作業をしなくてもインストールできました。

2013/11/06

ARToolKitのインストール(Windows7 64bit, VisualC++ 2010)

ARToolKitを次のような環境でインストールします。
・Windows7 64bit
・VisualC++ 2010




1)
ARToolKit本体をインストール

まず、ダウンロード
ARToolKit - Browse /artoolkit at SourceForge.net
http://sourceforge.net/projects/artoolkit/files/artoolkit/

解答したフォルダを任意の場所に置く。
(今回はCドライブ直下にしました。)

次は、コントロールパネルから環境変数のPathに次を追加します。
C:\ARToolKit\bin

そして、再起動します。

2)
glutのインストール
ARToolKitは描画などをGLUTを使って行っているのでインストールしないといけません。
Nate Robins - OpenGL - GLUT for Win32
http://user.xmission.com/~nate/glut.html

インストール方法は下記を参照
○○○○に怖いものなんてない!!: VC++2010でGLUTのインストール
http://kowaimononantenai.blogspot.jp/2012/10/vc2010glut.html


3)
vcpvcr71のインストール
(ARToolKitはもう古いので、前のWindowsのライブラリを利用します。
しかし、Windows7では標準で入らなくなってしまったので、個別に入れます。)

まず、ダウンロード
vcpvcr71 (msvcp71.dllとmsvcr71.dll同梱)のダウンロード : Vector ソフトを探す!
http://www.vector.co.jp/soft/dl/win95/util/se435079.html
解凍して、フォルダの中の
msvcp71.dll
msvcr71.dll

C:\Windows\SysWOW64
にコピー。
先ほどの場所でvcpvcr71をダウンロードしてきた場合には、
"vcpvcr71"という"msvcp71.dll"と"msvcr71.dll"がきちんと適応されているかチェックできる便利ツールもついているのでやってみるといいです。
ちなみに、
「msvcp71.dllとmsvcr71.dllはマイクロソフト社の製品です。
・・・・」
とかいてあったらおkです。
その代わりに何かエラーがでたら、適応できていないので、コピーする場所の再確認などをお願いします。

4)
サンプルの実行
Webカメラを挿して、
ためしに、"C:\ARToolKit\bin\simpleTest2"を実行してみましょう。

きちんとできていると思います。

次は"C:\ARToolKit\bin\simpleTest2d"を実行してみましょう。
しかし、これでは次のようなエラーが出てしまうと思います。


「コンピューターにMSVCP71D.dllがないため、プログラムを開始できません。
この問題を解決するためには、プログラムを再インストールしてみてください。」

これは先ほどダウンロードしたDLLのデバック版が入っていないため起きることです。
よってデバック版をダウンロードしてきます。

msvcp71d.dllの無料ダウンロード - DLL-files.com
http://jp.dll-files.com/msvcp71d.dll.html
msvcr71d.dllの無料ダウンロード - DLL-files.com
http://jp.dll-files.com/msvcr71d.dll.html

ちなみに、上のサイトのではインストールする方法というのが2種類ありますが、Fixerを使わず、ZIPファイルの使用(上級向け)
というのを選択したほうがいいです。

そして解凍したら、DLLを同じように"C:\Windows\SysWOW64"にコピーします。

これで、"simpleTest2d"をもう一回やってみると、
きちんと起動していると思います。

まずはこれでおkです。
次はプロジェクトを作って、ARToolKitのヘッダーやライブラリを使えるようにします。


参考にしたところ
Win7(64bit)で初めてのARToolKit インストール編│黒い森から来た少年
http://3335.blog106.fc2.com/blog-entry-103.html
ARToolKit (1): Windows7、Visual C++2010環境でインストール
http://tsujimotter.info/2012/05/14/artoolkit-1/