先日からhiphop-phpをいじってたんですが、ビルドを通していざ動作検証、で全然動かないことが多々ありましたもので。
http://wiki.github.com/facebook/hiphop-php/running-hiphop
Running HipHop - hiphop-php - GitHub
最初、動作検証用に用意していたphpファイルはhiphop-phpのソースディレクトリツリーの外に置いていたんですね。自作のファイルをソースパッケージ内に置く訳にもいきませんでしたので。そしたら、
running hphp... creating temporary directory /tmp/hphp_gVYmhr ... parsing inputs... parsing inputs took 0'00" (1 ms) wall time pre-optimizing... pre-optimizing took 0'00" (0 ms) wall time inferring types... inferring types took 0'00" (0 ms) wall time post-optimizing... post-optimizing took 0'00" (0 ms) wall time creating CPP files... creating CPP files took 0'00" (85 ms) wall time compiling and linking CPP files... CMakeFiles/program.dir/sys/dynamic_table_file.no.cpp.o: In function `HPHP::invoke_file(HPHP::String const&, bool, HPHP::LVariableTable*, char const*)':\ndynamic_table_file.no.cpp:(.text+0x29b): undefined reference to `HPHP::pm_php$__$__$hello_php(bool, HPHP::LVariableTable*)'\ncollect2: ld returned 1 exit status\nmake[2]: *** [program] Error 1\nmake[1]: *** [CMakeFiles/program.dir/all] Error 2\nmake: *** [all] Error 2\n compiling and linking CPP files took 0'45" (45426 ms) wall time hphp failed running hphp took 0'45" (45654 ms) wall time
こんな感じで、どうやら解決されないC++シンボルが発生するみたいだったんですな。
ていうかHPHP::pm_php$__$__$hello_php()って関数(orメソッド)名はどこから来てるのさ、といろいろいじくっている間に、hphpに渡していたファイルの名前=hello.phpをtest.phpとかhello2.phpとか色々いじってみると...、おろ、関数名も変わるじゃないですか。お。じゃあこのファイルの場所を動かしたらどうなるよ、ということでさらに色々試してみたら、カレントディレクトリに持ってきたら普通に動作した。
で、うまく動作したときとだめだったときを比較してみる。すると、ダメな時はphpディレクトリ配下が空っぽなのですよ。生成されたC++ファイルの構成を正常に生成されたものと比べれば一目瞭然なのでござるよ。
hironobu@claire:~/Projects/hiphop-php/src$ ls -l /tmp/hphp_dMpt9D/php 合計 12 -rw-r--r-- 1 hironobu hironobu 794 2010-07-01 22:14 hello.cpp -rw-r--r-- 1 hironobu hironobu 419 2010-07-01 22:14 hello.fw.h -rw-r--r-- 1 hironobu hironobu 479 2010-07-01 22:14 hello.h
hironobu@claire:~/Projects/hiphop-php/src$ ls -l /tmp/hphp_gVYmhr/php 合計 0
このhello.phpをディレクトリ掘って、hiphop-php/src/HELLO/hello.phpみたいに配置してみると、
hironobu@claire:~/Projects/hiphop-php/src$ ls -l /tmp/hphp_yW3fOW/php/ 合計 0 drwxr-xr-x 2 hironobu hironobu 53 2010-07-01 01:53 HELLO hironobu@claire:~/Projects/hiphop-php/src$ ls -l /tmp/hphp_yW3fOW/php/HELLO/ 合計 16 -rw-r--r-- 1 hironobu hironobu 6927 2010-07-01 01:53 hello.cpp -rw-r--r-- 1 hironobu hironobu 465 2010-07-01 01:53 hello.fw.h -rw-r--r-- 1 hironobu hironobu 581 2010-07-01 01:53 hello.h
こんな風になったでごわす。要は、hphpに引数として渡すphpファイルのパス指定が、カレントディレクトリより上位を指すと、生成されるファイルツリーのphpディレクトリ配下をはみ出してしまうためビルドに失敗するということのようです。つまり。てかこのhello.cppとかと同じファイルが、よく見ると/tmp直下にも生成されていた不思議。しかもダメだったときのファイルツリーとほぼおなじタイムスタンプで。そりゃ、どうもならんですわ。
ここ一週間くらいこれに振り回されたでござる。ぷすん。
