2013年7月24日水曜日

Cygwin環境でのmakeエラー

Cygwin環境でmakeを走らせると、

"複数のターゲットパターンです. 中止."

のような意味不明なエラーが出てしまいました。

以前はちゃんととmakeできていたはずですが、先日購入したVostro270sに環境を移した時に新しくインストールしたCygwinのmakeのバージョン違いが原因であろうことはだいたい推測がつきました。
単純に、makeのバージョンを下げる(今使っているのは3.82.90、以前はたしか3.79だったような)という方法もとれるのだけれど、それでは前進になっていないので、ちょっと調べることにしました。

しかし、ググってもほとんど情報がありません。あまり、この問題に遭遇する人はいないのかもしれません。見つかったのは、これとかこれくらいです。

問題は、自動生成された依存ファイル(*.d)にありました。同じCygwin環境でも、他のコンパイラを使う別プロジェクトでは、同じmakeを使ってもちゃんとビルドできます。もちろん、同じような依存ファイル自動生成makefileで動かしています。その別プロジェクトで生成される*.dと、問題の出る*.dファイルを比べると、違いはすぐに判りました。

依存ファイル(*.d)のパスに、DOS/Windows形式のパスが含まれていると、makeは上のエラーを出すことが分かりました。つまり、DOS/Windows形式のパスには、バックスラッシュが含まれているのが原因でしょう。

ということは、解決方法は2つになります。

  1. makeがDOS/Windows形式の依存ファイルを認識できるようにする。

  2. gccが-MDオプションで生成する依存ファイルのパスにDOS/Windows形式のパスを生成させないようにする。
1の方は、古いmakeに置き換えるというのも一つの手段ですが、こちらの方法はとらないことにします。
2の方はgccにパッチを当てることになりますが、残念ながらそのgccのソースが手元にないし、そういうパッチを作るにはそれなりに調査の時間がかかりそうなので、こちらも採用しないことにします。

代わりに、gccが生成した依存ファイルに含まれるDOS/Windows形式のパスを、UNIX形式のパスに変換することにしました。これなら、makefile中でsedとかを使って文字列変換するだけで対応できそうです。

というわけで、(かなり強引な)変換スクリプトをmakefileに入れました。

 cat < $(@F:.o=/d) | sed -e "s/.:[\]cygwin//g" | sed -e "s/[\]/\//g" | sed -e "s/[/]$$/\\\/" > $(@F:.o=.d)

ふう。
依存ファイル.dを読みだして、[ドライブ名:\cygwin]で始まるパスを消して、バックスラッシュを全部スラッシュに置き換えて、行末のスラッシュだけは再度バックスラッシュに戻し、最後に元の依存ファイルに書き戻す、ということをしています。
これを、makefile中の$(CC) -MD の次の行に挿入することで解決しました。

残念な結果・・・・

庭で育てていたスイカですが・・・

何とか一つだけ大きくなって子供の頭よりも大きくなっていたのですが、先日近くのカラスにつつかれてしまいました。

割れた訳ではなく、中の赤い部分が少し見えている程度だったので、収穫まであと1週間!と思って、収穫せずに粘ってそのまま畑に置いておきました(もちろん、カラス対策を強化しました)。
この炎天下ですから、傷口はすぐに乾いてカチカチになって中身への影響は少ないだろうと思っていましたが、むしろ中から白く濁った液体がジュクジュクと出ていました。さらに追い打ちをかけるように、先日の夕立のあと見てみたら、スイカの見た目は特に変化はなく元気そうでしたが、コバエが何匹がいて傷口が傷みはじめていました。

もうこれは限界だ!ということで収穫し、傷んだところは取り除いて食べられるところだけでも食べようと思ったのですが、状況は思ったより悪かったです。

半分に切ってみると、見た目にはなかなかのものです。少し白い皮の部分が厚いのと、中心部分に若干のすきまがあったくらいで食べられそうでした。
しかし、果肉を触ってみると少しヌルッっとして、スーパーなんかで買ってくるスイカに比べて脆い感じです。そして、匂いを嗅いでみると、臭いわけでもなく、酸っぱい匂いでもない、しかし、普通とは違う匂いがしました。強烈なにおいではなく、花を近づけなければ分からない程度の匂いですが、他の何かに喩えて言葉にしようにも説明が難しい匂いでした。

見た目は普通そうだけれど、危険な感じがします。というわけで、そのまま生ゴミ行きとなってしまいました。

その日、あとになって、ジワジワと無念な気持ちが押し寄せてきました。カラスに対する怒りではなく、「こんなことになるなら、カラスにつつかれた段階ですぐに収穫して、食べられるところだけでも食べておけばよかった・・・」、そんな気持ちです。
しかし、これで経験値がまた上がったので、来年はもっとうまくやれると思います。

2013年7月22日月曜日

64bit WindowsでXilinxのISEを動かす

仕事用もプライベート用も、基本的には64bit版Windowsに移行しました。基本的には、これまでのソフトウェアで動かないものはないのですが、Xilinx社のFPGAの開発環境であるISEだけは様子が違うようです。

というか、「ちゃんと64bit Windowsで動作確認しているの?」という疑問が拭いきれません。

現在のISEのバージョンは14.6なのだけれど、どうも12.xくらいのバージョンから既におかしいらしいです。何がおかしいのかというと、
  • ファイルダイアログを開くと、アプリが落ちる
というものです。ファイルダイアログを開くシーンはいくらでもありますから、これは致命的と言わざるを得ません。そして、それがバージョン12.xのころから14.6になった今でも、まだ改善されていないようです。

このISEをインストールすると、32bit版アプリと64bit版アプリがインストールされますが、32bit版を使う上ではこの問題は出ませんのでずっとこちらを使ってきましたが、このたび海外の掲示板で64bit版でのこの問題の回避策が書き込まれていたのでここで紹介します。(おそらく、日本語のサイトではまだ誰も書いていないようです。

原因はどうやら、libPortability.dllというDLLにあるようです。このDLL自体に問題があるか、または他のライブラリなどとの相性が合っていないようです。
このlibPortability.dllにはちょっとした仕様の違うものがあって、そちらと入れ替えるとうまく動くようになります。要点は、以下の通りです。

  1. c:\Xilinx\14.6\ISE_DS\ISE\lib\nt64\にあるlibPortability.libを削除する。
  2. c:\Xilinx\14.6\ISE_DS\ISE\lib\nt64\にあるlibPortabilityNOSH.libをコピーして、libPortability.libという名前に変える。
  3. 同じlibPortabilityNOSH.libc:\Xilinx\14.6\ISE_DS\common\lib\nt64\にコピーして、libPortability.libに名前を変える。
つまり、インストールされたlibPortability.dlllibPortabilityNOSH.dllと置き換える、ということです。
元ファイルを残しておきたい場合は、削除するのではなく、適宜リネームするなどでバックアップしておいてください。

2013年7月12日金曜日

Windows8のリフレッシュ機能

Vostro 270sが起動しなくなったので、仕方がありません。Windows8のリフレッシュ機能を使うことにしました。しかし、この機能を使うこと自体に関門がありました。

とにかく起動しないんです。Windowsのブートメニューも出ないんです。しかも、作っておいたファクトリリカバリ用のUSBメモリからも起動しないんです(以前、確認したときは起動していたんだけど)。
仕方がないので、別のPC用ですが、Windows8のインストールDVDがありましたので、それで起動して何とかリフレッシュをする画面にまで辿り着きました。

初めてWindows8のことをいろいろ調べたとき、この「リフレッシュ」と「初期化」の機能はなかなか良さそうだと期待していました(使わずに済むのが一番良いのだけれど)。しかし、リフレッシュ機能について、批判的なブログ記事も見ていましたので、「少なくともちゃんと起動するところまでは戻してくれる」「ユーザーファイルはそのまま残しておいてくれる」とこの2点だけに割り切って使うことに踏み切りました。しかし・・・

使えないです>リフレッシュ機能。

ふれこみでは、ストアアプリはすべて残る、あるいは、自動的に再インストールされる、とありましたが、実際には残るどころかほとんどありません。Windowsキーを押してスタート画面に表示されているのは「デスクトップ」「Internet Explorer」「ストア」と「MyDell」「Dell System Detect」だけです。スッキリして潔い!とは言うよりは、むしろ、「ちゃんとリフレッシュしたの?」と不安を覚えるほどです。でも、ストアアプリは基本的に使わないから、まあ目を瞑るとしましょう。

それから、なぜかCドライブにアクセスできません。エクスプローラでも、コマンドプロンプトでも「アクセスが拒否されました」となります。
なんとかアクセスできるのは「ライブラリ」の中だけです。幸い、重要なファイルはこのライブラリに入れていたので、何とか吸い出せそうですが、「リフレッシュって、個人用ファイルは残しておいてくれるはずじゃなかったのか?」と憤りを感じます(ファイル自体は残っているんだろうけれど、アクセスできないんじゃどうしようもないなあ)。

それ以外にもおかしなところだらけです。

Cドライブのプロパティは、使用領域0バイト、空き領域0バイトになっていますし、管理ツール系は軒並み起動できないです。とても、まともに使える状態ではないです。

ほんとうにどうしようもないので、再インストールにします。

2013年7月11日木曜日

マカフィーの呪い?

先日購入したDELLのVostro 270sには、マカフィーのセキュリティソフトがインストールされていました。マカフィーはいろいろ悪さをしてくれる(と聞いている)ので、あまり入れたくはなかったのですが、最初から入っているのなら使ってみるか?と思い、そのままにしておきましたが・・・。

やはり、ちょっとガマンできなかったです。


  • 個々のファイルをスキャンできるのはよいが、圧縮ファイルやsetupのようなファイルを内包しているものもちゃんとスキャンしてくれているのかなぁと思ってしまう(たぶん、しているんでしょうが・・・)
  • 一度、フルスキャンをかけてみましたが、時間がかかりすぎる。
  • 何よりも許せないのは、「McAfeeセキュリティセンター」という画面が消せない。いや、右上の×ボタンで消せるのだけれど、次の瞬間に別の「セキュリティセンター」が勝手に開く。これを10回くらい繰り返すともう表示されなくなることもあるけど、何十回とやってもゾンビのように表示される。たまに、セキュリティセンターが反応しなくなることもある。
  • タスクトレイにあるマカフィーのアイコンが反応しなくなることがあった。セキュリティソフトが止まってどうするの?(たぶん、セキュリティエンジン=サービスそのものは動いているんだろうけれど・・・)
というわけで、アンインストールしました。アンインストール時に、「まだ、有効期限が残っていますよ」と言われたけれど、未練はありませんのでバッサリと消しました。

翌日、Windowsが起動しなくなりました。

最初はSSDにエラーがあると報告され、chkdskをかけた後、どうにもならなくなりました。Windowsのブートが始まり、●がグルグル回っているのを見た後、画面が真っ黒になります。マウスカーソルは出て動かせますが、何も表示されずクリックしても何も起きません。電源ボタンを短く押すと、しばらくして電源は切れます。シャットダウン動作はしているような感じです。

セーフモードで起動したかったのですが、Windows8のブートメニューが出せません。F8連打とかやってもUEFIブートにしてしまっているせいか、効かないです。

困りました。マカフィーの呪いでしょうか・・・


2013年7月5日金曜日

XMPが使えなかった

先日購入したDELLのVostro 270sですが、静かでコンパクト、なかなか良いです。

ファンの音はぜんぜん聞こえないのは、◎
追加でSSDを2台入れたのですが、中は極めて狭い・・・、×

このPC用に購入したメモリ(W3U1600HQ-4G/N)ですが、XMPに対応しているけれど、マザーの方が対応していないみたいです。UEFI BIOSに入っても、XMPに関する設定がありませんでした。残念。
CL11がCL9になったところで違いは僅かですから、まあどちらでも良いのですが。


ニコス E-NEXCO passをもっと早く知っていれば・・・

通勤で高速道路を使いますので、毎月の高速料金がバカになりません。
ETCを使っての割引はもちろん、ETCマイレージに登録してポイントを無料走行分に自動還元させていますので、もうこれ以上オトクな方法はないだろうと、タカをくくっていました。

がっ、ありました!

ニコス E-NEXCO passというクレジットカードです。通常、クレジットカードのポイント還元率は0.5%が多いけれど、このカードはNEXCO高速道路でのETC支払に使うと還元率が1%になることを、今更ながらに知りました。しかも、ネットでいろいろ見ていると、1回でも使用すれば次年度は年会費不要ということで、これはいいことを知った!と喜んでいたのですが・・・。

なんと、2年目以降は条件にかかわらず年会費が発生するように変更されたそうです。その額、¥1837/年、これが高いか安いか。

私の場合は、毎月の高速料金はだいたい¥20,000から¥25,000くらいですから、最大で年間¥300,000くらいでしょうか。
これが普通のクレジットカードだと0.5%のポイント還元で、¥1500相当。
これが、E-NEXCO passだと1%のポイント還元で、¥3000相当。さらに、年間¥300,000以上の利用で、ポイントが20%upということなので、ポイント還元は¥3600相当に。
となると、普通のカードとの差額は¥2100。年会費¥1837を払うと手元に残るのは¥263ですから、敢えてこのカードを作るかどうかは微妙ですね。かける労力に見合わない気がします。