ホームページ  >  記事  >  バックエンド開発  >  C/C++で作成したダイナミックリンクライブラリをPHPで呼び出すチュートリアル、phpダイナミックリンクライブラリ_PHPチュートリアル

C/C++で作成したダイナミックリンクライブラリをPHPで呼び出すチュートリアル、phpダイナミックリンクライブラリ_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:57:31885ブラウズ

C/C++で作成したダイナミックリンクライブラリをPHPで呼び出すチュートリアル、phpダイナミックリンクライブラリ

一般的に言えば、phpはすでに高速ですが、一部のより高度な開発者にとって、より高速な速度を追求したい場合、これはありません自分で C コードを作成し、それをダイナミック リンク ライブラリ (多くの場合 .so ファイル) にコンパイルできるかどうかは疑問です。その後、PHP は新しい拡張子 (拡張子) を作成し、同時に拡張子の .so ファイルを呼び出します。 PHP 関数のインターフェイスは外部に公開されます。
実際の使用では、関数インターフェイスが呼び出されている限り、基盤となる高速な C 関数サービスを使用できます。

1.ダイナミックリンクライブラリ(共有)

ダイナミックリンクライブラリのファイル名の拡張子は通常「.so」です。 Windows システムでは、ファイル名の拡張子は「.dll」です。

プログラムがダイナミック リンク ライブラリにリンクされている場合、プログラムの実行時に対応するダイナミック リンク ライブラリ ファイルを見つける必要があります。

ダイナミック リンク ライブラリを使用してコンパイルされたプログラムでは、実行時に対応するダイナミック リンク ライブラリ ファイルがユーザーのマシンにインストールされている必要があり、プログラムがこれらのライブラリをロードできるように、これらのライブラリ ファイルを特定のディレクトリに配置する必要があります。

静的リンクライブラリを使用したプログラムほど使い勝手は良くないようですが、プログラムのサイズは小さくなります。多くのプログラムで使用されるライブラリの場合、動的リンクを使用する利点はさらに明らかです。

ダイナミックリンクライブラリの制作:

リーリー

オプション -fPIC は AMD64 では必要ですが、他のプラットフォームでは必要ありません。

スタティックリンクライブラリをダイナミックリンクライブラリにインクルードします

ダイナミック リンク ライブラリをコンパイルするときに、スタティック ライブラリをリンクし、リンク ライブラリのコンテンツをコンパイルするダイナミック ライブラリに含める必要がある場合は、オプション -Wl、--whole-archive を使用できます。

例:

リーリー

上記の -Wl はリンカーに渡されることを意味します。

2. ダイナミック C/C++ リンク ライブラリを呼び出す
以下、この記事の開発環境背景は CentOS リリース 6.5 です。 C ライブラリを呼び出せるようにするために、php 5.6.9 と apache 2.4 はソース コードからダウンロードされてコンパイルされます。yum! を介して直接インストールすることはできません。ご注意ください。 php と apache のソース コードのコンパイルについては、この記事では触れません。configure で適切なスイッチをオンにすることに注意してください。

具体的な手順は次のとおりです:
共有 library.so をシステム設定に追加します (共有ライブラリの名前が「libhello.so」であると仮定します)

リーリー

php/extディレクトリに拡張ヘッダーファイルを作成し、myfunctions.defという名前を付けます
このファイルに c 関数宣言を記入するだけです。関数ごとに 1 行。

リーリー

ext_skel を使用して拡張スケルトンを構築する

リーリー

config.m4の有効化スイッチをオンにします

リーリー

拡張機能のスケルトンは上で確立され、php は下で再構成されます (以下は私の個人的な構成ファイルです。読者は独自の状況に基づいて変更する必要があります)

リーリー

覚えておいてください!最後に —enable-myfunctions を必ず追加してください。この方法でのみ php にコンパイルされます。
拡張機能がコンパイルされたら、拡張機能内の myfunctions.c ファイルの変更を開始できます。その中に php->c 転送関数を追加し、転送関数で .so 内の関数を呼び出すことができます。
たとえば、hello_add php 関数を追加したい場合は、c 関数 add(int a, int b) を呼び出すことができます
a. 関数宣言を追加します

リーリー

b.php関数を追加します

リーリー

この関数では、.so ファイル内のインターフェイス関数を呼び出す場合、作成時に使用する .so 共有ライブラリを指定する必要があることに注意してください。共有ライブラリは、手順 1. の操作でシステム構成に追加する必要があります。
.so ファイルが呼び出された場合は、それを php/Makefile に追加します

リーリー

上記の c ファイルを変更するたびに、再度作成する必要があります

リーリー

Apacheサーバーを再起動します

リーリー

新しい拡張機能は phpinfo で確認でき、新しい拡張機能の関数を php で直接呼び出すことができます。


興味があるかもしれない記事:

  • phpからc++を呼び出す方法
  • C/C++でPHPを拡張してphpに関数を追加する
  • WindowsサーバーのIIS6/7では、php_curlなどの動的リンクをロードできません。 dll ライブラリ

www.bkjia.com本当http://www.bkjia.com/PHPjc/1108608.html技術記事 C/C++ で作成されたダイナミック リンク ライブラリを PHP で呼び出すためのチュートリアル、php ダイナミック リンク ライブラリ 一般的に言えば、php はすでに高速ですが、一部の上級開発者にとって、さらに追求したい場合は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。