2017-02-13 16 views
1

PHP拡張モジュールに依存するエクステンションがあります。これは正常にコンパイルするのに苦労しています。私はこの拡張機能をスタンドアロンの共有オブジェクトにしたいと思います。これは私が理解するところではphpizeの仕事です。この共有PHP拡張モジュールをオブジェクトファイルc.oでコンパイルするにはどうすればいいですか?PHP拡張ライブラリの依存関係

ようになり、スタンドアロン・アプリケーションのためのマニュアルのコンパイルは次のとおりです。

gcc -Wall -o php_library main.c c.o 

と共有ライブラリのために:私は変更することで、共有ライブラリの依存関係に追加するためのマクロがあることを理解し

gcc -Wall -shared -fPIC -o php_library.so main.c c.o 

config.m4など:PHP_ADD_LIBRARY(pthread,,EXTENSION_SHARED_LIBADD)ですが、コンパイル時に依存関係を追加する方法についてはわかりません。上記のユースケースに類似したマクロはありますか?

私は鬱病コードにアクセスできないので、この問題を解決するためにc.oを変更することはできません。

答えて

0

あなたの質問からわかるように、PHPエクステンションにリンクする位置に依存しないコード(つまり、-fPICオプション)を持つようにコンパイルされていないオブジェクトファイルc.oがあります。この場合、拡張コードと共有ライブラリの横に静的にリンクする必要があります。これを行うには、config.m4ファイルでいくつかの方法があります。

最初はそうのようにリンカにオブジェクトコードファイルの名前を渡すCFLAGSを設定することです:

CFLAGS=-Wl,c.o 

LDFLAGSを変更することです:

LDFLAGS=c.o 

私がしようとするともう1つはコンパイル時に次のような警告が表示されます。

すべてがどちらの方法でも動作するので、警告がどうなっているのか分かりません。しかし、最初の方法では警告が生成されません。私はこの質問に答えを期待

PHP_ARG_ENABLE(testbed, whether to enable testbed support, 
[ --enable-testbed Enable testbed support]) 

if test "$PHP_TESTBED" = "yes"; then 
    AC_DEFINE(HAVE_TESTBED, 1, [Whether you have testbed support]) 
    PHP_NEW_EXTENSION(testbed, testbed.c, $ext_shared) 
    #LDFLAGS=c.o 
    CFLAGS=-Wl,c.o 
fi 

はここで完全なサンプルconfig.m4です。

関連する問題