cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

openFrameworks v0.8(Visual Studio2012版x64)の64ビット化できるかな?

(2014.05.02補足。現在はこちらのsadmbさんのaddonが使いやすくて良いですよ。

http://forum.openframeworks.cc/t/ofxkinect2-addon-of-kinect-for-windows-v2-device-with-microsoft-sdk/15013

 

ドラッグアンドドロップQuickTimeによる動画操作ができませんが、とりあえず動くようになりました。

1.Pocoのx64ライブラリの入手

http://pocoproject.org/download/index.html

からソースコードをダウンロードします。afxwin.hが無いとうエラーで怒られるので、VisualStudio2012のMFCをインストールしておく。

PocoFoundationd.lib, CppUnitd.libが無いと怒られるので、先にCppUnitとFoundationをビルドしておきます。\poco-1.4.6p2-all\CppUnitCppUnit_x64_vs110.slnを開いて全てビルド。\poco-1.4.6p2-all\FoundationのFoundation_x64_vs110.slnを開いてバッチビルドで全てにチェックを入れてビルド。

他、DataやXML、Util、Netなどのフォルダに入りそれぞれをビルドしていきます。他のライブラリに依存するので、エラーが出たらビルドの順番を変えてみてください。

openSSL windows x64版をインストール。

http://slproweb.com/products/Win32OpenSSL.html

Win64 OpenSSL v1.0.1eをダウンロード。

NetSSL_OpenSSL_x64_vs110のプロジェクトのプロパティで、すべての構成を選択して、openSSLのincludeフォルダパスをインクルードディレクトリに追加。

2.FreeImageのx64ライブラリの入手

nVidiaのCudaをインストールして、FreeImage64.libをコピー。

3.glewのx64

http://glew.sourceforge.net/

 4.freetype

ft252.zip

5.glfw

http://www.glfw.org/download.html

64bit版プリコンパイルライブラリ

 

ofAppGLFWWindow.cpp内のglfwSetDropCallback関数の実装がどうしても見つからなかったので、ドラッグアンドドロップを諦めてコメントアウトします。

 //--------------------------------------------

void ofAppGLFWWindow::initializeWindow(){

  //----------------------

  // setup the callbacks

 

  glfwSetMouseButtonCallback(windowP, mouse_cb);

  glfwSetCursorPosCallback(windowP, motion_cb);

  glfwSetKeyCallback(windowP, keyboard_cb);

  glfwSetWindowSizeCallback(windowP, resize_cb);

  glfwSetWindowCloseCallback(windowP, exit_cb);

  glfwSetScrollCallback(windowP, scroll_cb);

  //glfwSetDropCallback(windowP, drop_cb); // for x64

}

6.QuickTime

quicktimeの64bitライブラリもどうしても見つからなかったので、QuickTimeのincludeとcloseの2か所をコメントアウトします。ofAppRunner.cpp内の

// TODO: closing seems wonky.

// adding this for vc2010 compile: error C3861: 'closeQuicktime': identifier not found

#if 0 // defined (TARGET_WIN32) || defined(TARGET_OSX)

#include "ofQtUtils.h"

#endif

 と

void ofExitCallback(){

  ~省略~

  // try to close quicktime, for non-linux systems:

#if 0 // defined(OF_VIDEO_CAPTURE_QUICKTIME) || defined(OF_VIDEO_PLAYER_QUICKTIME)

  closeQuicktime();

#endif

  ~省略~

}

 です。

これでコンパイルはとりあえず通ります。

7.各ライブラリのDLL

パスの混乱を避けるためにexeファイルと同じ場所に、64bit版のDLLファイルを集めてくることにします。

libfontconfig-1.dllのx64ビルド版など、入手しにくいものはちょっと昔に Harry Vermeulenさんが用意したものを借りてきます。

http://www.mediafire.com/download/kv4zeie1j1xxmkk/hV_of_preRelease_v007_vs2010_x64_stripped.zip

を解凍して、libsの中のフォルダ階層を下ってdllをコピーしてきてください。新しいものを入手できるdllはlibと正しくバージョンのあったものを用意してください。

全てのファイルがそろった状態でexeを実行すれば、64ビットアプリとしてopenframeworksのプログラムが動きますが、32bit版DLLが読み込まれていると0xc00007bなどのエラーで怒られることがあります。その場合、

http://www.dependencywalker.com/

から64ビット版のものをダウンロードして、exeをドラッグアンドドロップして、読み込まれているdllがx64版になっているかどうかを確認してください。

 

以上で、制限はあるもののとりあえずopenframeworksをwindows上でx64ビルドしたものを動かせるようになります。なお、何か不具合が起こっても一切責任をとれませんので、自分の責任の範囲内で行ってください。