1: 必要なツール:
cygwin、Windows プラットフォーム上で実行される Unix 風のシミュレーション環境
php ソースコード (圧縮パッケージ)
php バイナリ ファイル、Windows にインストールされた php です
vs2008 以降 (vs2010、vs2013)
win32build.rar と bindinglib_win32.rar (主に config.win32.h の生成に使用されます)
2: 構成プロセス
1: PHP ソース コードを解凍します。これは、PHP の開発を担当するディレクトリです。ディレクトリには、すべての拡張機能と 2 つのファイルのデフォルトのソース コードがあります。
ext_skel_win32.php および ext_skel ファイル
ext_skel は拡張機能を作成するためのシェルであり、Windows では実行できないため、Unix 環境をシミュレートするには cygwin を使用する必要があります
php ext_skel_win32.php –extname=myext または
php.exe ext_skel_win32.php –extname=myext
ここで間違いやすいです
次に、cygwin がインストールされていない、または cygwin がセットアップされていない場合、次のエラーが発生します。したがって、cygwin をインストールし、PHP ソース コードの ext ディレクトリにある ext_skel_win32.php を開く必要があります。 $cygwin_path = “c:/cygwin/bin” という変数を、インストールしたディレクトリに変更して保存します。もう一度お試しください
それでもエラーが発生する場合は、この画像を見て間違いがないか確認してください。
すべてが完了した後に次の状況が発生した場合、拡張機能ディレクトリ(スケルトン)が正常に作成されたことを意味します。
に含まれるディレクトリは次のようになり、変更する必要がある2つのファイルは次のとおりです。矢印で示されています)
3: 依存する php5ts.lib を追加します
php バイナリ パッケージの dev ディレクトリにある php5ts.lib を拡張ディレクトリにコピーします
4: (1) php_hello.h ファイルを変更します
新しい関数を拡張します: PHP_FUNCTION(confirm_myhello_compiled); の行の後に行を追加します。
(2) hello.cファイルを修正
<code>1. zend_function_entry myhello_functions[] = { 2. PHP_FE(confirm_myhello_compiled, NULL) /* For testing, remove later. */ 3. PHP_FE(hello, NULL) // 新增的行 4. {NULL, NULL, NULL} /* Must be the last line in myhello_functions[] */ 5. }; </code>
<code>1. PHP_FUNCTION(hello){ 2. php_printf(”Hello C extension”); 3. } 4. </code>
この時点で、主要なタスクは基本的に完了しましたが、ここはエラーが最も発生する可能性が高い場所でもあります。
最も一般的なエラーは、コンパイル中に「インクルード ファイル "../main/config.win32.h" を開けません」というメッセージが表示され、その結果、メイン フォルダーにそのようなファイルが存在しないことです。
したがって、win32build.rar と bindinglib_win32.rar の両方を PHP ソース コードの win32/build ディレクトリに解凍し、win32/build を環境変数に追加します
「cmd」と入力してphpソースコードディレクトリに移動し、「
」と入力します。
cscript /nologo configure.js –with-php-build=”../win32build” –without-libxml –disable-odbc Enter キーを押すと表示される場合があります
は、cl.exe が見つからないことを意味するため、インストールされている vs2008 ディレクトリ内の bin ディレクトリを環境変数に追加します。私のマシンでは、「D:vs2008VCbin」になります。再度実行しても、画像が見つからないというエラーが報告される可能性があります。 。一般的な意味は、C++ コンパイラーが少なくとも vc9.0 (vs2008) であるため、vs2008 以降のコンパイラーを使用するようにしてください
実行を継続します:
このファイルは Microsoft Visual Studio 10.0Common7IDE ディレクトリにあります。 、VCbin ディレクトリにコピーできます。ステートメントの実行を正常に続行します。 D:php ソース コードのメイン ディレクトリに config.win32.h ファイルを生成します。
config.win32.h を開きます: 内部を検索します
vc10 を使用してコンパイルする場合は、それを
最終的に問題を解決し、コンパイルしました。 。成功したら、DLL を生成します。
しかし、それでもコンパイルの問題が発生し、致命的なエラー c1902: プログラム データベース マネージャーが一致しません。 。
とても大変でした。Baidu を通じて CSDN フォーラムで同じ問題を見つけて、最終的にはこのように解決しました。
mspdbsrv.exe または mspdbcore.dll が見つからないか、またはそのバージョンが mspdb80.dll のバージョンと異なっています。これら 3 つのファイルの同じバージョンがシステムにインストールされていることを確認してください。
これら 3 つのファイルを、VC インストール ディレクトリの下の Common7IDE ディレクトリから、インストール ディレクトリの下の VCbin にコピーします
すべての問題が解決され、php_hello.dll のコンパイルに成功しました
6: 最後に、それをバイナリ php ディレクトリの下の ext ディレクトリにコピーし、php.ini を開いて、extension=php_hello.dll を追加しました
Apache を再起動し、関数をテストします。
追記:その時にテストした関数はcock()でした
出力結果:
これで終わりです。 。 。この問題に取り組むのは本当にクレイジーでした。幸いなことに、私は根気強く何度も問題を解決しようとして、ついに成功しました。参考のために、私が遭遇したすべての問題を投稿しました。 PHP 拡張機能は非常に楽しいので、独自の PHP 関数を開発できます。ただし、前提として、C/C++ をよく学ぶ必要があります。 。 。とにかく、ゆっくり時間をかけて、みんなの成功を祈ってください~
上記では、Windows 上で PHP 拡張機能を開発するための c/c++ の使用方法を、内容の側面も含めて紹介しており、PHP チュートリアルに興味のある友人に役立つことを願っています。