PHPでC言語の共有ライブラリ(.soファイル)を呼び出す方法は?
PHPでC言語の.soダイナミックライブラリを呼び出すには、PHPのFFI(Foreign Function Interface)拡張機能を使用することができます。
最初に、PHPのバージョンがFFI拡張機能をサポートしていることを確認してください。コマンドラインでphp -mを実行し、FFIが含まれているかどうかを確認してください。
その後、PHPスクリプトを作成し、そのスクリプトでFFI拡張機能を使用してC言語の.so動的ライブラリを読み込み、その中の関数を呼び出します。以下はその例です:
<?php
$ffi = FFI::cdef("
// 在这里定义C语言函数的签名
int add(int a, int b);
", "path/to/your/library.so");
$result = $ffi->add(2, 3);
echo $result; // 输出:5
?>
上記の例では、まずFFI::cdef()関数を使用してC言語関数のシグネチャを定義し、次にFFI()関数を使用して.soダイナミックライブラリをロードしました。その後、$ffiオブジェクトを使ってC言語関数を呼び出すことができます。これはPHP関数を呼び出すのと同じように行います。
FFI::cdef()関数では、C言語関数のシグネチャ(関数名とパラメータの型)、およびダイナミックライブラリのパスを指定する必要があります。関数名の後ろには、関数のパラメータの型を指定することができます。例えば、int add(int a, int b)は、関数addが2つの整数型パラメータを受け取り、整数型の結果を返すことを示します。
最後、$ffi->add(2, 3) を呼び出し、C言語の関数addを成功裏に呼び出し、その結果を$result変数に代入しました。そして、最後に結果をecho文で出力しました。
注意事項:
- 実際の.so ダイナミックライブラリファイルのパスに”path/to/your/library.so”を置き換えてください。
- 他のライブラリに依存している.soダイナミックライブラリを使用する場合、ロード前にLD_LIBRARY_PATH環境変数を設定する必要があるかもしれません。
この例が役に立って、C言語の.soダイナミックライブラリを呼び出すのに成功することを願っています。