2009-06-04
プロバビリティ・ムーン(PROBABILITY MOON)
前回の読書から、間が空きすぎ。
三部作の第一部。
宇宙にスペーストンネルと呼ばれる、星系を繋ぐ未知の建造物があり、人類はそれを利用して太陽系外に進出している未来。そのスペーストンネルを数個くぐり、辿り着く辺境の惑星に人類が降り立つところから始まる。
その辺境の惑星は世界(ワールド)と呼ばれ、そこの住人は人間に非常に近くはあるが、ある決定的な違いを持っていた。
それが、『共有現実』というメカニズム。
世界人は、相手と現実を共有しないと、頭痛が起こってしまう。簡単に言うと、相手に嘘をつくことが出来ないのだ。法的にとか道徳的にではなく、生化学的に隠し事や謀が不可能となっている。
そんな牧歌的な社会なので、文明も地球の中世程度にしか発展していない。
そして、生まれつき、なんらかの理由で現実を共有できない者は、『非現実者』として忌み嫌われている……。
表向き、地球人は世界人と取引をしたり、科学的な調査を行うことを目的としているのだが、実は地球人がこの惑星を訪れたのには別の理由があった。その理由が、『共有現実』のメカニズムに大きく関係しているのだが、それはまた第二部以降で明らかに。
Label:
本
2009-06-02
make3.81の罠
cygwinのmakeを使ってる人なら、はまりがちな罠の一つに、make3.80とmake3.81の差がある。
他にも細かい差異はあるんだろうけど、一番困るのが、
Makefileの中に記述するパス形式に、ドライブレター指定を入れちゃいかん!
ってところ。
具体的には、
と書けない(make3.80だと、大丈夫だった)。
かといって、
と書くと、$(CC)がcygwinのパスを理解できない場合、終わる。
と書くしかない。めんどい。
勿論、全てを相対パスで記述できるなら問題ないのだが、難しい場合もあると思う。
そこで、弊社のプログラマがある方法を思いついた(ここまで、自分で思いついたかのように書いてきたけど、実は他人の褌w)。
と。
で、以下の方法。
1) まず、ドライブ直下に、(Dドライブなら)D:\cygdrive\dというフォルダを掘る
2) 『コンピュータの管理』->『ディスクの管理』から『ドライブ文字とパスの変更』を選び、『追加』をクリックして、先ほど作ったフォルダにマウントしてやる
3) こんな状態になるはず
4) 試しにDOS窓(cmd.exe)からアクセスしてみる
5) cygwinのシェルからもアクセスしてみる
ちゃんと両方とも、D:\にアクセスできてるのを確認。
これで、
と書いちゃってから、“うわーん、$(CC)がcygwinのパスを理解してくれないよー”と判明しても大丈夫。
当然ながら、ドライブ指定を省略しているので、同一ドライブ内のアクセスでないとダメ(と思ったけど、マウント方法を工夫すれば対応できるね)。
いちいち設定しないといけないのが面倒だけど、こういう方法もあるって事で……。
他にも細かい差異はあるんだろうけど、一番困るのが、
Makefileの中に記述するパス形式に、ドライブレター指定を入れちゃいかん!
ってところ。
具体的には、
hoge.exe: hoge.o D:/lib/hoge.lib
$(CC) -o $@ $<
と書けない(make3.80だと、大丈夫だった)。
かといって、
hoge.exe: hoge.o /cygdrive/d/lib/hoge.lib
$(CC) -o $@ $<
と書くと、$(CC)がcygwinのパスを理解できない場合、終わる。
hoge.exe: hoge.o /cygdrive/d/lib/hoge.lib
$(CC) -o $@ $(shell cygpath -m $<)
と書くしかない。めんどい。
勿論、全てを相対パスで記述できるなら問題ないのだが、難しい場合もあると思う。
そこで、弊社のプログラマがある方法を思いついた(ここまで、自分で思いついたかのように書いてきたけど、実は他人の褌w)。
“Windowsツールでもcygwinのパスでアクセスできるようにすればいいんじゃね?”
と。
で、以下の方法。
1) まず、ドライブ直下に、(Dドライブなら)D:\cygdrive\dというフォルダを掘る
2) 『コンピュータの管理』->『ディスクの管理』から『ドライブ文字とパスの変更』を選び、『追加』をクリックして、先ほど作ったフォルダにマウントしてやる
3) こんな状態になるはず
4) 試しにDOS窓(cmd.exe)からアクセスしてみる
5) cygwinのシェルからもアクセスしてみる
ちゃんと両方とも、D:\にアクセスできてるのを確認。
これで、
hoge.exe: hoge.o /cygdrive/d/lib/hoge.lib
$(CC) -o $@ $<
と書いちゃってから、“うわーん、$(CC)がcygwinのパスを理解してくれないよー”と判明しても大丈夫。
当然ながら、ドライブ指定を省略しているので、同一ドライブ内のアクセスでないとダメ(と思ったけど、マウント方法を工夫すれば対応できるね)。
いちいち設定しないといけないのが面倒だけど、こういう方法もあるって事で……。
登録:
投稿 (Atom)