私は C で書いているので、この件についてはあまり詳しくありません。まず、プログラムは Linux 上で、PHP のバージョンは 5.3.13 で、C で書いた簡単な追加の PHP 拡張機能が使用できることを説明します。問題は、C ライブラリが C ライブラリに正しくリンクされていないことだと思います: C ライブラリには 2 つのタイプがあります:
1. Linux システム自体に付属していますが、コンパイル時に -l を使用してリンクする必要があります。たとえば、C スレッド ライブラリ -lpthread
2. たとえば、C API 関数 long SetCode( を提供する) の C .so ダイナミック リンク ライブラリ libdecode.so があります。 long l_input);
書き換えます phpで呼び出される関数はこんな感じで書きます
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);}
前者の場合: http://blog.csdn.net/franzhong/article/details/7265429
つまり、libdecode.so は私が書いたライブラリではなく、サードパーティの C ライブラリによって提供されています。この C ライブラリを呼び出すための PHP 拡張機能を作成する予定です。コンパイルに問題がないことだけです。最後のステップは、このサードパーティ ライブラリをリンクする方法を知ることです。 libdecode.so ライブラリのソース コード .c ファイルがありません
これは、PHP 拡張機能であるかどうかとは関係がありません
C プログラムで接続する方法を知っていればよいだけです
理解できないので、インターネットでチュートリアルを見つけて試してみましょう 原理的な観点から、php にはヘッダーが含まれている必要があります。ファイルを作成し、実行時に、dl シリーズは動的ライブラリにインターフェースを動的にロードする必要があります。動的ライブラリによって公開されるインターフェースは何ですか?
生成したカスタム拡張機能の親ディレクトリに移動します。 ext ディレクトリ。 mysql
#CLEAR
make clean#Add module ncdocxml
など、拡張機能が実際にどのように実装されているかを見てください。 ./configure --with-php-config=/usr/nc-home/php5/bin/ php-config --enable-ncdocxml
#Compile module ncdocxml
make LDFLAGS=-lncdocxml
これは、php 拡張機能であるかどうかとは関係がありません
C プログラムで接続する方法を知っていればよいだけです
C での動的ライブラリのリンクは、実行可能プログラムが最終的に生成されるときにリンクされます (Windows の .exe に相当)。最終的な実行可能プログラムは C ではなく PHP であるため、.so をリンクする最後のステップは C によって完了されていません
この投稿は、2012-06-07 14:14:13 に xuzuning によって最終的に編集されました
これは静的読み込みであるため、対応する lib ファイルとヘッダー ファイルはありません。静的ロードを実現することは不可能です
あなたが話しているのは静的読み込みだけですが、対応するlibファイルとヘッダーファイルはありません。静的ロードを実現することは不可能です
必要なのは動的ロードであり、これはもちろん C プログラムで行われます。たとえば、ウィンドウの下の BC には、指定された DLL をロードする LoadLibrary 関数があります。もちろん、ヘッダー ファイルがないとやはり非常に困難です
さらに、vb と vfp では、常に動作中のダイナミック リンク ライブラリを動的にロードしています。完了した作業
もちろん、ヘッダー ファイルは存在します。そうでないと、コンパイルは成功しません。実際、実行可能プログラムを生成するときに、-ldl コンパイル オプションがあります。最終的には、Linux システムに付属するダイナミック ライブラリである .so を PHP にリンクする必要があり、上記の問題を libdecode.so から libdl.so に置き換える必要があります
熱心なご協力ありがとうございます
皆さん、ありがとうございます。問題は解決しました。問題はまだここの config.m4 にあるはずです。解決策は次のとおりです。
vi config.m4
追加
PHP_ADD_LIBRARY_WITH_PATH(decode, /home/wzb/lib, TEST_SHARED_LIBADD)
PHP_ADD_INCLUDE(/home/wzb/include)
PHP_SUBST(TEST_SHARED_LIBADD)
その後、コマンドを順番に実行します
phpize
./configure --enable-test --with-php-config=/usr/local/php/bin/php-config
make
最後に、モジュールで PHP 拡張ライブラリ test.so を取得できます。 libdecode.so の C API 関数の呼び出し
こんにちは、この場所以外で処理を行った場所を聞いてもよろしいでしょうか。同様の問題に遭遇しましたが、現時点では解決する方法がありません。あ
皆さん、ありがとうございます。問題は解決しましたが、問題はまだ config.m4 にあるはずです。解決策は次のとおりです。
vi config.m4
追加
PHP_ADD_LIBRARY_WITH_PATH(decode, /home/wzb/lib, TEST_SHARED_LIBADD)
PHP_ADD_INCLUDE(/home/wzb/include)
PHP_SUBST(TEST_SHARED_LIBADD)
その後、コマンドを順番に実行します
phpize
./configure --enable-test --with-php-config=/usr/local/php/bin/php-config
make
最後に、モジュールで PHP 拡張ライブラリ test.so を取得できます。 libdecode.so の C API 関数の呼び出し