FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

強引手法

前の記事に引き続いて、環境が変わったことでビルドができなくなっているものを見つけました。
MrubyBridgePluginPackage に含まれている MrubyBridge-ASP のビルドもできなくなっていました。
これは 最近の cygwin で asp+tecs をビルドしようとするとエラーが出る と根は一緒のようです。
intptr_t, uintptr_t の型定義が重複しています。
ヘッダの include が変わって問題が起きるようになったんだなあ、環境が変わって面倒だなあと思って調べ始めました。
最初に、こんなファイルを MrubyBridge-ASP の下に作ってビルドしてみました。

// stdint.h
#ifndef TECS // tecsgen 実行時は、本物の stdint.h は読み込まない
#include "/usr/include/stdint.h"
#endif


うまくいったので、やっぱり intptr_t, uintptr_t が stdint.h に含まれるようになったからかあと、いったん解決。
でも、よく考えると、なぜこれで、コンパイルは、通ったのかな?と疑問を感じました。

こういうことって、とても重要ですね。少しでも疑問を感じたら、ちゃんと調べないと。
# そもそも、こういう疑問を感じないようでは、よいエンジニアにはなれないよね

さて、調べていって分かったことは Makefile の tecsgen の引数の -I (ヘッダパス指定) がよくなかったことです。
本当は MrubyBridge-ASP の下にある include を指しているべきところ、asp+tecs の arch 下のディレクトリを指していました。
環境依存のヘッダが arm 用のものになっていました。
本当は cygwin 環境用のもの、つまり /usr/include 下のものだけが include されるべきところ、arm 用のものを混入させていました。

以下のように Makefile の 49行目を修正しました。

修正前

$(TECSGEN_EXE) -D CHAR_T_DEFINED -I ../../../TECS/tinet/tecs_package/asp+tecs//include -I ../../../TECS/tinet/tecs_package/asp+tecs//target/at91skyeye_gcc -I ../../../TECS/tinet/tecs_package/asp+tecs/arch -I $(TECSPATH) test.cdl


修正後

$(TECSGEN_EXE) -D CHAR_T_DEFINED -I include -I $(ASP)/include -I $(TECSPATH) test.cdl


本当は tecs+asp へのパスを変数指定 ($(ASP) を指定) するつもりが、ここではできていませんでした。
CFLAGS だけが、そのようになっていましたので、その点も合わせて変更しました。

結局、以前は、たまたまビルドがうまく通っていたのですが、cygwin の変更でうまくいかなくなって、潜在的な不具合が発覚ということになりました。

実は、コンパイルがなぜうまく通ったのか疑問を感じたのは、ブログを書き始めてからでした。
環境が不安定な場合、エラーが出ている時は、こんな強引手法も使えたりするものです、と書こうとしたのですが、人のコードを疑う前に、まず自分のコードを疑ってみよう、というソフト設計者の心得に落ち着きました。
スポンサーサイト

テーマ : ソフトウェア開発
ジャンル : コンピュータ

プロフィール

hiro22022

Author:hiro22022
TECS 開発ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。