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

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

Jun 21, 2016 am 08:57 AM
php

ある関数が 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 が表示されれば関数呼び出しは成功です。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles