とりあえず、コンパイラが怪しい感じがするのでMacPortsからXcodeとは別のgccを入れることに。
% sudo port install apple-gcc42
インストールは成功するが、インストールされたgcc (v4.2.1)を使ってもbinutilsのビルドが通らない。ウガー!しょうがないので、今度はバージョンを落としてみる。
% sudo port install apple-gcc33
今度は、Intel Mac用のApple版gccにはv3.3が無い事が発覚。更にGNU版gccを試みる。
% sudo port install gcc33
するとビルドエラーでストップ。
Undefined symbols:
"__init_keymgr", referenced from:
___darwin_gcc3_preregister_frame_info in crt2.o
ld: symbol(s) not found for inferred architecture i386
諦めきれずにリビジョンアップしたgcc v3.4もやってみる。
% sudo port install gcc34
やっぱりビルドエラー。
/gcc/gcc.c:1095: error: syntax error before ',' token
なんでこんな初歩的なコンパイルエラーが出るんだろう。
う〜む・・・どうしたものか。
2008年11月13日木曜日
MacBookでマイコン開発(2)
MacOS X Leopard上でのH8 3069向けクロス開発の環境構築にはまっています。ターゲット”h8300-hms”向けのgccクロスコンパイラを準備しなければいけないわけですが、サポートツール(arとかldとか)としてbinutilsパッケージもクロス開発に対応させなければいけません。
ところが、こいつのコンパイルが通らない。やったことは以下の通り。
ウガー!!何故なんだー。ちなみに開発ツールとしてLeopardのDVD-ROMから入れたgccのバージョンは以下の通り。
% gcc -v
Using built-in specs.
Target: i686-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5465~16/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --host=i686-apple-darwin9 --target=i686-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5465)
トラブルシューティングは続く・・・
ところが、こいつのコンパイルが
- binutils-2.19のソ
ースコードをゲット - 適当なところに上記ソースを展開
- 展開後のbinutils-2.
19ディレクトリに移動 - “build”ディレクトリを作
成 - 上記作成済みディレクトリ内に移
動 - % ../configure --prefix=<パス> --target=h8300-
hms - % make
- “This target is no longer supported in gas”というエラーと共にma
ke失敗
ウガー!!何故なんだー。ちなみ
% gcc -v
Using built-in specs.
Target: i686-apple-darw
Configured with: /var/tmp/gcc/gc
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5465)
トラブルシューティングは続く・
2008年11月4日火曜日
MacBookでマイコン開発(1)
仕事でH8マイコンをベースにしたソフトウェアの開発をやっているんですが、ここでは備忘録がてら情報を残しておこうと思います。
1. EclipseのC開発環境のTIPS
Eclipse 3.4.1のC開発環境を導入すれば、基本的にMacOS上でのC言語によるソフトウェアの開発の準備はOKですが、1点だけポイントがあります。
Cプロジェクトで[staticライブラリ]を選択するとstaticアーカイブ(拡張子.a)を生成するプロジェクトが作れますが、このプロジェクトのツールチェインを内部ビルダに設定すると、ツールチェインにranlibを実行する段が無く、生成されたstaticアーカイブを実行ファイルとリンクする際にシンボルテーブルが無いと言われてしまいます。
これは、ツールチェインの[GCCアーカイバ]でarのオプションに"-s"を手作業で加えることで回避できます。(元々arのオプションは”-r”なので、結果的に”-rs”となります)
1. EclipseのC開発環境のTIPS
Eclipse 3.4.1のC開発環境を導入すれば、基本的にMacOS上でのC言語によるソフトウェアの開発の準備はOKですが、1点だけポイントがあります。
Cプロジェクトで[staticライブラリ]を選択するとstaticアーカイブ(拡張子.a)を生成するプロジェクトが作れますが、このプロジェクトのツールチェインを内部ビルダに設定すると、ツールチェインにranlibを実行する段が無く、生成されたstaticアーカイブを実行ファイルとリンクする際にシンボルテーブルが無いと言われてしまいます。
これは、ツールチェインの[GCCアーカイバ]でarのオプションに"-s"を手作業で加えることで回避できます。(元々arのオプションは”-r”なので、結果的に”-rs”となります)
2008年10月17日金曜日
任天堂の苦しい言い訳?
WiFiのWEP暗号化が無意味だという話題が世の中を席捲していますが、PCやPDA等の主要なWiFi機器はWPAに既に対応しているので、設定さえ変えれば特に問題無かったりします。
しかし、世の中に大量に普及していて、WiFi機能があり、更にWEPにしか対応していないという機器があるのです。
そう。それが任天堂DSです。
ITmedia: WEPは一瞬で解読 — ニンテンドーDSはどうなる
IT業界人はゲームも大好き、ということで早速槍玉に挙がっています。まぁ、ああいった低価格なゲーム機器で複数の暗号化方法に対応するのは、製造原価の観点から見送らざるを得なかった判断なのかも知れませんが、任天堂広報室の最後のひと言が面白い。
「ただ乗りはマナー違反。家の鍵が壊れていたからといって、侵入していいというものではない。マナーの向上を期待する」
え〜!家の鍵が壊れていたら、泥棒なら喜んで侵入しますよね?
今問題にしているのは、たまたま脇の甘いWiFi電波をただ乗りするという比較的無害なユーザではなく、そこを踏み台にして悪さをする様な犯罪者ユーザの事なんだと思いますが・・・。
ただ乗りされるだけなら一時的に自分がお金を払っている回線の帯域をタダで使われてしまうだけで、まぁ悔しいという程度で済んでしまう話ですが、仮に犯罪を起こされた場合、侵入されたWiFiを持っている方にISPが割り当てたグローバルIPでインターネットに接続して犯罪を犯すわけで、下手するとWiFiに侵入されてしまった方は無実の罪で捕まってしまうことにもなりかねません。問題にすべきはこういったシチュエーションで、マナーとかそういう次元では無いと思うんですが・・・。
まぁ、広報担当者はITの専門家でもなく、ましてやセキュリティの専門家でも無いんでしょうけれど、ちょっとこのコメントは的外れ過ぎるかなぁ、という気がしました。
しかし、世の中に大量に普及していて、WiFi機能があり、更にWEPにしか対応していないという機器があるのです。
そう。それが任天堂DSです。
ITmedia: WEPは一瞬で解読 — ニンテンドーDSはどうなる
IT業界人はゲームも大好き、ということで早速槍玉に挙がっています。まぁ、ああいった低価格なゲーム機器で複数の暗号化方法に対応するのは、製造原価の観点から見送らざるを得なかった判断なのかも知れませんが、任天堂広報室の最後のひと言が面白い。
「ただ乗りはマナー違反。家の鍵が壊れていたからといって、侵入していいというものではない。マナーの向上を期待する」
え〜!家の鍵が壊れていたら、泥棒なら喜んで侵入しますよね?
今問題にしているのは、たまたま脇の甘いWiFi電波をただ乗りするという比較的無害なユーザではなく、そこを踏み台にして悪さをする様な犯罪者ユーザの事なんだと思いますが・・・。
ただ乗りされるだけなら一時的に自分がお金を払っている回線の帯域をタダで使われてしまうだけで、まぁ悔しいという程度で済んでしまう話ですが、仮に犯罪を起こされた場合、侵入されたWiFiを持っている方にISPが割り当てたグローバルIPでインターネットに接続して犯罪を犯すわけで、下手するとWiFiに侵入されてしまった方は無実の罪で捕まってしまうことにもなりかねません。問題にすべきはこういったシチュエーションで、マナーとかそういう次元では無いと思うんですが・・・。
まぁ、広報担当者はITの専門家でもなく、ましてやセキュリティの専門家でも無いんでしょうけれど、ちょっとこのコメントは的外れ過ぎるかなぁ、という気がしました。
2008年10月15日水曜日
WEP暗号化はもはや用を為さず?
あまりに衝撃的な記事を見てしまったので、慌てて自宅と職場の無線LANの暗号化方式をWEPからWPA2に変更しました。
ITmedia - 「WEPを一瞬で解読する方法」を研究者グループ発表 プログラムも公開予定
プログラムが公開されるまでの期間が言わば「執行猶予」だったわけだけれど、もしそんなプログラムが公開されてWEPキーのクラッキングがカジュアルに行えるようになってしまったら、もはやWEP暗号化なんて何の意味も無くなってしまう。
というわけで、この記事を読まれた方は一刻も早くWEPを捨ててWPAもしくはWPA2 (AES暗号)へ!
ITmedia - 「WEPを一瞬で解読する方法」を研究者グループ発表 プログラムも公開予定
プログラムが公開されるまでの期間が言わば「執行猶予」だったわけだけれど、もしそんなプログラムが公開されてWEPキーのクラッキングがカジュアルに行えるようになってしまったら、もはやWEP暗号化なんて何の意味も無くなってしまう。
というわけで、この記事を読まれた方は一刻も早くWEPを捨ててWPAもしくはWPA2 (AES暗号)へ!
2008年10月12日日曜日
C言語プリプロセッサ
現在、仕事で組込向けプログラムをC言語で実装しているのですが、ネットで調べても載っていなかったことを備忘録代わりに書いておきます。
C言語のプリプロセッサ命令に文字列結合の”##”という命令があるのですが、ネットのどこを調べても載っていません。私が以前Cを勉強したとき(もうかれこれ10年以上前ですが・・・)には確かに習った記憶があるのですが、最近は教えないんでしょうか??
ともあれ、手元のコンパイラ(gcc v4.0.1 for MacOS X)ではちゃんと機能しますので、私の記憶違いでは無さそうです。
そういえば、私がCを勉強していたときも、関数ポインタについて記述している書籍は殆ど皆無でしたので、ある意味プロフェッショナル向けの隠し機能みたいな考えられ方をしてるんでしょうかね。
C言語のプリプロセッサ命令に文字列結合の”##”という命令があるのですが、ネットのどこを調べても載っていません。私が以前Cを勉強したとき(もうかれこれ10年以上前ですが・・・)には確かに習った記憶があるのですが、最近は教えないんでしょうか??
ともあれ、手元のコンパイラ(gcc v4.0.1 for MacOS X)ではちゃんと機能しますので、私の記憶違いでは無さそうです。
そういえば、私がCを勉強していたときも、関数ポインタについて記述している書籍は殆ど皆無でしたので、ある意味プロフェッショナル向けの隠し機能みたいな考えられ方をしてるんでしょうかね。
2008年10月4日土曜日
Cプログラミング雑記
すっかりこちらの更新が滞っていました。
最近、C言語でのプログラミングを仕事でやっているんですが、組込向けなので自前でライブラリ関数レベルの機能を実装しなければいけなくて、結構ハマる事もしばしば。
最近ではBASE64エンコード/デコードのコードを書いたのですが、細かなビットシフト演算の部分でミスがあったりして、1週間くらい格闘する羽目に陥りました。結局は全て解決して、やっとちゃんとしたコードになりました。
あともう一つハマったのは、CでBASE64エンコードしたデータを受け取る側のPHPスクリプトの問題です。Content-Typeをapplication/x-www-form-urlencodedで送ると、URLエンコード特有の処理をPHPが裏でやってくれてしまうんですよね。いわゆる、空白文字をプラス文字(+)に置き換えている処理を、PHPスクリプトでは自動デコードしてくれてしまうのです。
BASE64は、アルファベット(A-Za-z)と数字(0-9)と記号(+/)にデータを変換するのですが、URLエンコードの自動でコード処理をされてしまうと、+にエンコードされていたデータが空白に戻されてしまっておかしな事になります。
これもだいぶハマりました。。。
まぁ、うまく行った時の達成感は得がたい物がありますが、C言語は本当に全てがプログラマ任せで大変です。Javaがメインだった頃が懐かしい・・・
最近、C言語でのプログラミングを仕事でやっているんですが、組込向けなので自前でライブラリ関数レベルの機能を実装しなければいけなくて、結構ハマる事もしばしば。
最近ではBASE64エンコード/デコードのコードを書いたのですが、細かなビットシフト演算の部分でミスがあったりして、1週間くらい格闘する羽目に陥りました。結局は全て解決して、やっとちゃんとしたコードになりました。
あともう一つハマったのは、CでBASE64エンコードしたデータを受け取る側のPHPスクリプトの問題です。Content-Typeをapplication/x-www-form-urlencodedで送ると、URLエンコード特有の処理をPHPが裏でやってくれてしまうんですよね。いわゆる、空白文字をプラス文字(+)に置き換えている処理を、PHPスクリプトでは自動デコードしてくれてしまうのです。
BASE64は、アルファベット(A-Za-z)と数字(0-9)と記号(+/)にデータを変換するのですが、URLエンコードの自動でコード処理をされてしまうと、+にエンコードされていたデータが空白に戻されてしまっておかしな事になります。
これもだいぶハマりました。。。
まぁ、うまく行った時の達成感は得がたい物がありますが、C言語は本当に全てがプログラマ任せで大変です。Javaがメインだった頃が懐かしい・・・
登録:
投稿 (Atom)