ODE 0.16.1 のインストール法 (Windows + Code::Blocks)
education
2020.06.18

ODE0.16.1のインストール法を説明します。ここでは日本であまりメジャーではありませんが、海外ではユーザも多く、私の講義でも利用しているマルチプラットフォームの開発環境CodeBlocks20.04用の記事です。
注:私の環境ではデモプログラムはビルド・実行できますが、キーボードからの入力だけはうけつかない不具合があります。
1. ODE 0.16.1のインストール
- 次のダウンロードサイトからode-0.16.1.tar.gzをデスクトップへ保存・解凍する.解凍ソフトはLhaplusを推奨します.
- ode-0.16.1フォルダーをcドライブのトップへコピー.以下のディレクトリ(フォルダ)構成になります.
- コマンドプロンプトの起動
- Windows10: マウス矢印を画面左下に移動すると、検索窓「ここに入力して検索」が現れるので、検索窓に「cmd」と入力するとコマンドプロンプトが見つかるので「Enterキー」を押し、コマンドプロンプトを起動する。コマンドプロンプトはキーボードからの命令を受け付けるウインドウです。
- 以下のように2回コマンドを打ち込みますが,打ち間違えると失敗するのでコピーアンドペーストしてください。コピーアンドペーストした後はEnterキーを押してください.なお,cdの前に白い四角があると全角空白文字が挿入されています.全角文字があると失敗するので,その場合は矢印キーでカーソールを移動してDeleteキーで消してください.また、premake4で始まるコマンドは2行にわたっています。2行目のwindows codeblocksまでコピーしてください。
$ cd c:\ode-0.16.1\build
$ premake4 --with-demos --only-double --only-static --os=windows codeblocks
- 成功するとcodeblocksというcode::blocks用のディレクトリがbuildフォルダの中に生成されるので,あるかどうかエクスプローラで確認する.なお, c:\ode-0.16.1\buildの意味はCドライブの一番上にode-0.16.1というフォルダがあり,その中にbuildというフォルダがあるという意味.

2. ODEのビルド
- デスクトップにできてcodeblocksのアイコンをダブルクリックして、codeblocksを起動する。
- ODEをビルドするために次の設定を行う。
- コンパイラの設定:codeblocksの上にあるメニューバーから設定(s)→コンパイラとデバッガ(C)→グローバルなコンパイラ設定のToolchain実行ファイルが以下のように”C:\CodeBlocks\MinGW”なっているか確認する。違う場合は「自動検出」をクリックして変更する。

- リンカの設定:グローバルなコンパイラ設定ウインドウのToolchain実行ファイルに2つ左にあるタブ「リンカ設定」をクリックする。下図のように「リンクするライブラリ」に”stdc++”を追加する。「追加」をクリックすると「ライブラリを追加」ウインドウが開くので「ファイル」に”stdc++”と入力して「OK」をクリックすると追加される。stdc++が下図のように追加されたら「OK」をクリックして設定を終える。


- codeblocksのメニューバーから「ファイル(F)」→「開く(O)」を選択。ファイルを選ぶウインドウが開くので次のファイルを選ぶ。
c:¥ode-0.16.1¥build¥codeblocks¥ode.workspace
- 「ビルド(B)」→「ワークスペースをビルド(W)」を選択。ワークスペースはVisual C++のソリューションと同様なもの。
- デモプログラムの実行ファイルはc:¥ode-0.16.1¥lib¥Debugに生成される。メニューバーの「ビルド(B)」→「実行(R)」でdemo_buggyを実行させて、下のウインドウが起動すればODEのビルド成功。


- キーボード操作(aキーを押すと増速、zキーで減速、, . キーで操舵)でバギーが動くはずですが、私のWindows10 Education (バージョン2004, ビルド19041.450)ではキーの入力ができず動いていない状況です。Linuxだと問題なく動いています。
終わり
").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1
").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0
タイトルとURLをコピーしました
コメント
匿名 (2021-05-07 07:13 PM) 様
> シミュレーション画面をマウスでクリックしながらキー入力を行うと動きます
同じ問題に遭遇していますがIMEを旧バージョンに戻さずに
クリックしたままキー入力で解決しました
本当にありがとうございます
出村様
いつも参考にさせて頂いております.
初めまして,と申しますか,つくばチャレンジ2009参戦時に,ご挨拶させて頂いたことがございます.
ところで,win10 2004でキーボード操作できないという件ですが,
名無し様ご指摘のように,Windows10 2004以上かつ,日本語IMEの場合に発生するようです.
C:\ode-0.16.2\drawstuff\src\windows.cpp の mainWndProc() の WM_CHAR 取得時にコケるようです.
“WM_CHAR フリーズ”で検索すると,microsoftのサイトで当面の回避策が出てきます.
「以前のバージョンのMicrosoft IMEを使う」により回避できるようです.
この他,シミュレーション画面をマウスでクリックしながらキー入力を行うと動きます.
IMEがスキップされているのかもしれません.
参考まで
匿名さん、つくばチャレンジ2009とはずいぶん昔になりますね。コメントありがとうございます。大変参考になりました。
windows.cpp の mainWndProc() の case WM_CHAR: 入口で trap してみても
そこに到達する前に既にフリーズします
「以前のバージョンのMicrosoft IMEを使う」が正解っぽいですが
“WM_CHAR フリーズ”で検索すると
63696506-47d2-9997-0b72-41a68e328692
これらの問題は KB4586853で解決されました。
KB4586853
8fb07fb8-a7dd-ea62-d65e-3305da09f92e
とありました。
出村様
初めまして、いつも参考にさせていただいております。
私はVisual Studioで使用していますが
win10 2004でキーボード操作できませんでした。
ただ本現象はIMEに問題があるらしく、キーボード設定をUSキーボードに変更したところ
入力できましたので、参考までに連絡させていただきます。
名無しさん、
コメントありがとうございます。参考になります。
出村様
ご回答頂きありがとうございます。
教えて頂いた2つの方法を試したのでご報告いたします。
実行後の挙動:2つの解決方法にて同様の状態
バギーの起動成功
キーボード操作は不可
その他
バギーのコマンド入力画面にてコマンドを入力するが反応無し。
バギーのモデルウィンドウにてコマンドを入力するが反応無し。
また、環境内の雲が高速で移動している。
ウィンドウを選択すると読み込み中となりウィンドウが固まり、
コマンドプロントを閉じるしか停止手段が無い。
私の勘違いかもしれませんが、
雲の移動速度についても何かエラーが発生しているのでしょうか。
ご回答を待っている間に赤いボールのチュートリアルを試していたのですが、
こちらも雲の移動が高速かつボールの挙動も地面を突き抜けるですが、
下斜めに飛んでいくような動きをしておりました。
お手数をお掛けして申し訳ございませんが、
ご確認をよろしくお願い致します。
やはりキーボードから入力できないですか。Linux版は問題ありません。私はWindowsでは開発しないので試していませんが、Visual C++ではどうでしょうか。なお、雲の移動速度はエラーというよりOpenGLの描画速度の問題だと思います。あまりお力になれずすみません。
出村様
ご確認して頂きありがとうございます。
こちらこそお手数をお掛けして申し訳ございませんでした。
VisualC++を使用するというのは、
Visual Studioでodeをビルドしてみるということでしょうか。
少し調べて試してみます。
実はROSの勉強も行っており、
Linuxでもodeを試せるのでこちらもやってみようと思います。
一方的に質問ばかりでご迷惑をお掛け致しました。
プログラミングやシミュレーションについて素人だったので、
こちらの詳細な解説には大変助かっております。
長々とお付き合い頂きありがとうございます。
質問ありがとうございました。ウェブサイト記事の不備がわかり修正できました。授業ではWindows + CodeBlockを使っていたのですが、標準入力の不具合が出たので、今年からWSL2+Ubuntu18.04環境に切り替えました。ODEのグラフィクスは遅いですが問題なく動いています。
出村様
お世話になっております。
先日、Codeblocksのインストールについて質問させて頂いたものです。
こちらのページに従いODEのインストールを進めていたのですが、
最後のバギーの実行時にエラーが出てしまいODEのビルドが出来ない状態となっております。
お手数をお掛けして申し訳ございませんが、
以下のエラーについてご教授頂けないでしょうか。
内容
エラー1
libgcc_s_seh-1.dllが見つからないため、コードの実行ができません。
プログラムを再インストールすると、この問題が解決する可能性があります。
エラー2
libstdc++-6.dllが見つからないため、コードの実行ができません。
プログラムを再インストールすると、この問題が解決する可能性があります。
再インストールの指示があったため、ODEをはじめからインストールしてみたのですが、
解決しませんでした。
以上のエラーをみると、足りないファイルを補えば解決するのかと考えられます。
これら足りないファイルについて適当なフォルダに移動すればよいのでしょうか。
お忙しいところ恐縮ですが、
ご確認をよろしくお願い致します。
武田
コメントありがとうございます。先ほど、試したところ同じエラーになりました。ご迷惑をおかけしてすみません。以下の2つの解決方法があります。なお、私のWindows環境ではキーボード操作でバギーを動かすことはできません。キーボードで操作できるか教えてください。
1.CodeBlocksメニューの「ビルド(B)」→「実行(R)」でdemo_buggyを実行させる。
2.C:\CodeBlocksにlibgcc_s_seh-1.dll、libstdc++-6.dll、libwinpthread-1.dllの3つのファイルがあるのでそれをC:\ode-0.16.1\lib\Debugにコピーする。
もしファイルがない場合は、C:\CodeBlocks内を検索して見つけてください。