PHP の C 拡張機能はどのようにしてサードパーティのライブラリを呼び出すのでしょうか?
私は C を書いているので、この件についてはあまり知りません。まず、このプログラムは Linux で動作していることを説明します。 13. C で簡単なプログラムを書きました 加算演算用の PHP 拡張機能は使用できます。C ライブラリが正しくリンクされていないことが問題だと思います。
C ライブラリには 2 種類あります。 1. Linux システム自体に付属していますが、gcc が C スレッド ライブラリ -lpthread
2 などの実行可能ファイルをコンパイルするときにリンクするために -l を使用する必要があります。たとえば、これはサードパーティです。 、現在、C.so ダイナミック リンク ライブラリ libdecode.so があり、C API 関数 long SetCode(long l_input);
呼び出し用に php 用に書き直した関数は次のように記述されています
C/C++ コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
PHP_FUNCTION(php_setcode)
{
long arg_1 = 0;
long re = 0;
if(zend_parse_parameter(ZEND_NUM_ARGS() TSRMLS_CC, "l", &arg_1) == FAILURE)
{
return;
}
re = SetCode(arg_1);
}
ログイン後にコピー
config.m4 に追加
PHP_ADD_LIBRARY_WITH_PATH(decode, /home/wzb/lib, TEST_SHARED_LIBADD)
PHP_ADD_INCLUDE(/home/wzb/include)
コマンドを実行
./configure --with-php-config=/usr/local/php/bin/php-config
make
を入れます生成された test.so と C サードパーティ ライブラリ libdecode .so が /usr/local/php/lib/php/extension/no-debug-non-zts-20090626 にコピーされました
ここで、次のステートメントを追加しましたphp.ini
extension=test.so
extension=libdecode.so
最後に、php_setcode の関数を php で正常に呼び出すことができません
どこで呼び出す必要があるのか教えてください上記の手順を追加して、php_setcode
------Solution----
への呼び出しを実現します。 C の処理関数を実装したいですか、それとも php がそれ自体を呼び出す関数を定義したいのですか。後者の場合、それを php 拡張子にしたらどうでしょうか。
前者の場合: http://blog .csdn.net/franzhong/article/details/7265429
-----解決策---------
わからないので行きますオンラインでチュートリアルを見つけて苦労します。原則的な観点から、PHP にはヘッダー ファイルが含まれている必要があり、実行時に DL シリーズは動的ライブラリ内のインターフェイスを動的にロードします。どのインターフェイスが公開されるかを PHP に指示する必要があります。ダイナミックライブラリ。
------解決策----------------------
生成されたカスタム拡張機能の親ディレクトリへ 次に、 ext ディレクトリである必要があります。 mysql などの拡張機能が実際にどのように実装されるかを見てみましょう
------解決策---------
#Clear
きれいにする
#モジュール ncdocxml を追加
./configure --with-php-config=/usr/nc-home/php5/bin/php-config --enable-ncdocxml
#モジュール ncdocxml をコンパイル
LDFLAGS=-lncdocxml を作成します
------解決策------------------
あなたが話しているのは、対応するlibファイルとヘッダーファイルがなければ静的読み込みだけです。静的ロードを実現することは不可能です
必要なのは動的ロードであり、これはもちろん C プログラムで行われます。たとえば、ウィンドウの下の BC には、指定された DLL をロードする LoadLibrary 関数があります。もちろん、ヘッダー ファイルがないと非常に困難です
さらに、オペレーティング システムのダイナミック リンク ライブラリを常に動的にロードしています。 vb と vfp では何が不可能なのか。
------解決策------------------
参考のためにこのブログ投稿を見つけました http :/ /blog.csdn.net/offbye/article/details/6832536