- ベストアンサー
PHPでC++プログラムを実行する方法
- PHPでC++プログラムを実行する方法についてご相談です。
- 質問者はApacheを通してPHPでC++プログラムを実行したいと考えていますが、正しく実行できないとのことです。
- 質問者はApacheの設定ができていないことが原因だと考えています。具体的には、C++プログラムが動的モジュールを読み込む際にパスの設定が正しくない可能性があるとしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
調べてみたところ Mac OS X の dynamic library の仕組みって linux (GNU libtool 系)のそれとは、別なんですね。(BSD OS はこういう仕組みなのかな?) Windows dll Linux so Mac OS dylib 僕の環境( snow leopard 10.6.5 )ライブラリのロードを確認するには library_check.php として <?php echo '<pre>'; // otool コマンドでロードしているライブラリを確認する var_dump( system( 'otool -L /hoge/fuga/test' ) ); echo '</pre>'; ?> のような PHP ファイルを作成してブラウザからアクセスして _www ユーザが実行した場合と、一般ユーザ(あなたのアカウント)で otool -L test を実行した場合を比較してみてはどうでしょうか? 違いがあった場合は man update_dyld_shared_cache とか dyld 系の情報を調べた方がいいみたいです。 man dyld を見ると DYLD_LIBRARY_PATH という環境変数がそれっぽいです。 そうすると、前回のshell script ラッパーは #!/bin/sh env DYLD_LIBRARY_PATH=/usr/local/lib /hoge/fuga/test のように書くか、直接システム関数中に system( 'env DYLD_LIBRARY_PATH=/usr/local/lib /hoge/fuga/test' ); のように記述する形になりそうです。 ただ、dyld 系のドキュメントを斜め読みしてみると、そういったお作法ではなくて、別にちゃんのした手順がありそうです。 僕も最近( snow leopard から )のMacユーザなので時間を見て調べてみようと思います。 逆に、もし何かわかりましたら教えてくださいな。
その他の回答 (2)
- saijyo_739
- ベストアンサー率53% (119/222)
スクリプトの中で設定する事も可能ですよ。 http://www.php.net/manual/ja/function.putenv.php putenv( "LD_LIBRARY_PATH=/usr/local/lib" ); ※取得して追加した方が確実。 Apacheの設定ファイル(httpd.confや.htaccess)にSetEnv を書く方法でもできます。 もしくはApacheを起動するスクリプトで起動する前に環境変数を設定しておいても良いです。 ※環境変数はプロセスの持っている名前と値で、子プロセスに引き継がれます。(シェルの初期化ファイルで上書きされる設定になっていると消えますが)
お礼
お返事ありがとうございます。 なんとか解決することができました。 また何かあったときにはよろしくお願いします。
- NARH
- ベストアンサー率82% (88/107)
system(); で実行してるんですかね? 安直に #!/bin/sh env LD_LIBRARY_PATH=XXXX /hoge/fuga/program みたいなシェルスクリプトを書いてこれを実行するんじゃダメ?
補足
お返事ありがとうございます。 実行はsystem関数で実行してます。 また少し分からない部分があったため ご質問させていただきたいのですが、、、 これって、LD_LIBRARY_PATHをプログラムに設定をするってことですよね。 通したいパスが/usr/local/libなので env LD_LIBRARY_PATH=/usr/local/lib XXXX だと思うのですがどのプログラム(XXXX)に LD_LIBRARY_PATHを通せばいいのですか? あと、補足なのですが、、、 同環境にてXAMPPをいれて試したところ、正常に動いたのでおそらくはPHPかapacheの設定ということだと思います。 質問にも書かせていただいたとおり、 apacheを通さずPHPを実行した場合、こちらも正常動作するのでおそらくはapacheの設定がなにか抜けているのだと思っています(もしかしたら間違っているかもしれませんが、、、) いちおーXAMPPを使う手もあるのですが、 今からXAMPPを入れてパソコンを ぐちゃぐちゃにしたくないので。。。 長々とすみませんが、よろしくお願いしますm(_ _)m
お礼
返事が遅れてしまってすみません。 とりあえず、問題を解決できましたー。 あまり根本的には理解していないのですが、 http://d.hatena.ne.jp/lyco/?of=1 のサイトを参考にさせていただいて envvarsの中に PATH="/usr/local/lib" を設定したところ、直りましたー dyldのエラーなので DYLD_LIBRARY_PATHを設定するのかと思っていたのですが、、、普通のPATHの方でいいっぽいですね。 なぜなんでしょう。。。?? ホントいろいろアドバイスくださってありがとうございました。すごい助かりました。 また何かあったらよろしくお願いします。