スポンサーリンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 少し作り始めた | トップページ | 形だけはビルドできた »

自業自得なのだが

今日は、AG-ムービーカッターのUbuntu用ネイティブ版に、Windows用ネイティブ版の自前クラスを追加し、必要な修正を行っていたのだが、元々、移植し易い構造にはしていたものの、本当に移植する日が来るとも思っていなかったので、作業量は多い。

このブログを見ている人は、あまり普通の人では無い筈なので、UbuntuではC++が使えるので、Windows用のC++プログラムのソースコードをUbuntu上でビルドすれば、Ubuntu上で動作するバイナリが問題なく出来上がる、なんて事を思っている人は、まず、いないだろう。

しかし、OSのAPIに依存しない処理コードなら、Windows用プログラムで使われているソースコードでも、Ubuntu上でそのまま使える、筈、ではある訳だ。

で、作者的には、前にも書いたように、特定の環境でしか動作しないプログラムはあまり書きたくない人なので、AG-ムービーカッターの処理ルーチンについても、極力、OSに依存する部分とそうでない部分を分けていて、今日は、OSに依存しない部分に相当するクラスファイルを追加してみたのだ。

ところが、コンパイルエラーは山のように出た。

何が問題なのだろう、と、エラーの内容を見てみると、例えば、コンパイラは、DWORDなんて型は知らない、と、言うわけだ。

言われてみると、その通りで、OSに依存しない筈の処理ルーチンでも、OSに依存する部分との通信は必要になるため、変数の型については、Windows流にしてあった訳だ。

で、どうしようか、と、少し考えたのだが、結局、変更量をあまり増やしたくはなかったため、DWORD等の型については、クラスファイルに変更を加えるのはヤメにして、移植用のヘッダファイルを追加して、そこで定義する事にした。

さらに、Windowsでは普通に定義されていた、Bitmap関係の構造体だとかについても、上記のヘッダファイルに追加したので、コンパイルエラーはかなり減ったのだが、それでも、エラーの数はまだまだ沢山あった。その理由は、CreateFileだとかMutexなんかの基本関数については、Win32APIの関数を直接呼び出していたからだ。

なので、上記のヘッダにこれらの基本関数も定義して、エラー数をさらに減らしたのだが、それでも、まだ、変なエラーは沢山出ていた。

この辺からが自業自得になっていくのだが、Windows環境のVisualStudio2008でビルドしていた時にはエラーにはならなかったのだが、Ubuntuのg++では、constの扱いがシビアにチェックされるようで、その絡みでエラーが出ていたのだ。

例えば、function(char *param) と定義している関数をfunction("test"); みたいに使っても、VisualStudio2008ではエラーにはならなかったのだが、g++ではエラーになってしまう訳だ。

実際には、functionの中で*paramを書き換えてはいないので、このエラーに関しては、関数の定義を変更するだけで良かったのだが、その他にも、function(DWORD data) というような関数を、function(NULL); として呼び出している場合なんかもあって、これらについても修正が必要になった。

と、言うことなのだが、実は、上記については、大した問題でもなかったのだ。

大きな問題は、作者的には、処理コードを見やすくするために、処理内容によって、unsigned int/unsigned long/DWORD/UINTなんかを使い分けていたのだが、Windows環境では、unsigned longもDWORDも32Bit幅なのだが、Linuxの64Bit環境では、unsigned longは64Bit幅になってしまうのだ。

なので、結構、色々な場所でunsigned longを使っていたのだが、それらについては、全て32Bit幅になる形に変更しなければならなくなった訳だ。

と、いうような状況なので、変更量は結構多くなっているのだが、元々、真面目に移植するつもりでコードを書いていれば、こんな作業は必要なかった筈なので、こういった変更作業も自業自得になる訳だ。

= この記事に関連する公開中ソフト =

AG-ムービーカッター for Ubuntu 12.04LTS

AG-ムービーカッター for Ubuntu12.04LTS

(2013/12/07追加)

« 少し作り始めた | トップページ | 形だけはビルドできた »

トラックバック


この記事へのトラックバック一覧です: 自業自得なのだが:

« 少し作り始めた | トップページ | 形だけはビルドできた »

2020年4月
      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    

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google