2012-04-17 19 views
1

私はCでPHP拡張を作成しましたが、私自身のC++動的ライブラリ(私はXcodeでプログラミングします)で自分のプログラムのすべての機能を提供したいと思います。カスタムC++ライブラリを使用したPHP拡張

(&を使用してください)私のPHPの拡張機能(私のC++ライブラリ用のラッパーとして機能する)で、私のC++のdynlibの関数をリンクするにはどうすればいいですか?私のC++ライブラリとリンクできるようにconfig.m4を変更する必要がありますか?

答えて

1

あなたのC++ライブラリにCラッパーインタフェースを作成し、そのためのPHP拡張を作成します。

Cインターフェイスの場合、プライベートメソッドを持つC++クラスでも、クラスを "struct"として宣言します。とにかく詳細を公開しないで、前方宣言だけを使用します。

すべてのパブリックメソッドは、ポインタを取る自由な関数によって公開され、Createメソッドでインスタンスを作成し、Destroyメソッドで破棄します。

したがって、本質的に "Cライブラリ"と対話していますが、その実装はC++で行われています。あなたが置くべき

注:あなたのヘッダーの上部に

#ifdef __cplusplus 
extern "C" { 
#endif 

(メソッドの前にしかし、インクルードには警備員が含まれた後)、それらの最後に

#ifdef __cplusplus 
} 
#endif 

(メソッドの後に

ラッパーライブラリーは実際にはC++コンパイラーでビルドする必要があります。ライブラリー内のC++関数を呼び出すことによって実装されるためです。

Cラッパーを、別のライブラリを使用する新しいライブラリまたは同じライブラリの一部として作成することができます。

代わりに、PHPラッパーマクロを使用することもできます。これは基本的にバインディングも作成しますが、多くの作業を行います。これはまた、config.m4ファイルをどうするかを紹介します

http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/

参照してください。

+0

私は何をしようとしています。しかし、私はどのように私のC + +のライブラリにphpの拡張子makefileまたはconfig.m4を使用してリンクするのですか? – Daniel

+0

これをCライブラリとしてリンクし、Cインタフェース関数のみを呼び出します。 Cの拡張機能の場合と同じように、ここで行います。 – CashCow

+0

しかし、config.m4でどうすればいいですか?それのようなリンク? gccを使って私は直接-lmylibを呼び出しますが、この状況ではわかりません – Daniel