ホームページ > php教程 > php手册 > Linux 環境で PHP に C/C++ 拡張プログラミングを実装する

Linux 環境で PHP に C/C++ 拡張プログラミングを実装する

WBOY
リリース: 2016-06-21 08:57:11
オリジナル
939 人が閲覧しました

ある関数が so ファイルにコンパイルされているのですが、php から呼び出すにはどうすればよいでしょうか? 1 つの方法は、php モジュール (php 拡張子) を作成し、php でモジュール内の関数を呼び出し、そのモジュールを使用して so 内の関数を呼び出すことです。ここでは、オペレーティング システムとして Fedora Core 6 を使用した簡単な例を示します。

まず、単純な so ファイルを作成します。

/**
     * こんにちは。c
     * コンパイルするには、次のコマンドを使用します:
     * gcc -O -c -fPIC -o hello.o hello.c
     * gcc -shared -o libhello.so hello.o
    */
int hello_add(int a, int b)
{
return a + b;
}

次に、それを .so ファイルにコンパイルし、システムに配置します。

$ gcc -O -c -fPIC -o hello.o hello.c

$ gcc -shared -o libhello.so hello.o

$su

# echo /usr/local/lib > /etc/ld.so.conf.d/local.conf

# cp libhello.so /usr/local/lib

# /sbin/ldconfig 正しいことを検証するための小さなプログラムを作成します。
/**
     * hellotest.c
     * コンパイルするには、次のコマンドを使用します:
     * gcc -o hellotest -lhello hellotest.c
    */
#include
int main()
{
int a = 3、b = 4;
printf("%d + %d = %dn", a, b, hello_add(a,b));
return 0;
}

コンパイルして実行します:

$ gcc -o hellotest -lhello hellotest.c

$ ./hellotest

3 + 4 = 7OK、

次にPHPモジュールを作成します。まず、php-devel パッケージがインストールされていることを確認してください。インストールされていない場合は、インストール CD から見つけてください。次に、phpのソースコードをダウンロードします。私はphp-5.2.9.tar.gzを解凍して使用しています。

$ tar xzvf php-5.2.9.tar.gz

$ cd php-5.2.9/ext を実行し、次のコマンドを使用して test という名前のモジュールを作成します。

$ ./ext_skel --extname=test このコマンドを実行すると、モジュールをコンパイルするためにどのコマンドを使用する必要があるかを尋ねられます。残念ながら、これはモジュールを PHP に統合するコンパイル方法です。これを動的にロード可能な php_test.so にコンパイルする場合、方法はより簡単です。

$ cd test まず、config.m4 ファイルを編集し、16 行目と 18 行目のコメントを削除します (コメント記号は dnl です)。

16: PHP_ARG_ENABLE(テスト、テストサポートを有効にするかどうか、
17: dnl コメントが整列していることを確認してください:
18: [ --enable-test テスト サポートを有効にする]) 次に、phpize () プログラムを実行して構成スクリプトを生成します。

$ phpize してから php_test.h を開き、PHP_FUNCTION(confirm_test_compiled); の下に関数宣言を追加します。

PHP_FUNCTION(confirm_hello_compiled); /* テストのため、後で削除します。 PHP_FUNCTION(test_add); hello.c を開き、PHP_FE(confirm_test_compiled, NULL) の下に次の内容を追加します。
zend_function_entry test_functions[] = {
PHP_FE(confirm_test_compiled, NULL) /* テストのため、後で削除します */
PHP_FE(test_add, NULL) /* テストのため、後で削除します */
{NULL, NULL, NULL} /* test_functions[] の最後の行である必要があります */
};

次に、test.c の最後に test_add 関数の内容を記述します。

PHP_FUNCTION(test_add)

{
long int a, b;
long int の結果;
If (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) {
return;
}
結果 = test_add(a, b);
RETURN_LONG(結果);
}

保存して終了し、コンパイルしてインストールします:

$ ./configure --enable-jinzhesheng_module --with-apxs=/usr/local/apache/bin/apxs --with-php-config=/usr/local/php/bin/php-config$ make

# cp modules/test.so /usr/lib/php/modules 次に、次の内容を含む test.php ファイルを /www/web/ に作成します。

dl("test.so");
echo test_add(1, 2);
?>

次に、ブラウザで test.php ファイルを開き、3 が表示されれば関数呼び出しは成功です。



関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート