2010-12-18 13 views
0

Mac OS 10.6ではxtreeというPHP拡張モジュールをコンパイルしようとしていますが、記号が見つからないといくつかのエラーが発生しています。 Debian 4を実行しているマシンで、シンボルエラーがなくても正常にコンパイルできました。Mac OS 10.6でPHP拡張モジュールがコンパイルされない

メイクファイルはのように表示されます。ここでは

LIBTOOL = /usr/bin/libtool 
INSTALL = /usr/bin/install 

PHPINC := $(shell /opt/local/bin/php-config --includes) 
PHPLIBS := $(shell /opt/local/bin/php-config --libs) 
PHPDEST := $(shell /opt/local/bin/php-config --extension-dir) 

XTREE_LIB = xtree2.so 
OBJS = xtree.lo tree.lo node.lo parser.lo string.lo token.lo xsock.lo xpath.lo buffer.lo 

.SUFFIXES : .lo .c 

all : ${XTREE_LIB} 

clean : 
    rm -f *.o 
    rm -f *.lo 
    rm -f *.so 

.c.lo : 
    gcc -fpic -DHAVE_XTREE -DPIC -DCOMPILE_DL_XTREE ${PHPINC} -c -o [email protected] $< 

${XTREE_LIB} : ${OBJS} 
    gcc -shared -L/usr/local/lib -rdynamic -o ${XTREE_LIB} ${OBJS} 

install : ${XTREE_LIB} 
    $(INSTALL) -c ${XTREE_LIB} ${PHPDEST}/${XTREE_LIB} 

は、Mac上でコンパイルしたとき、私は受け付けており、エラーのサンプルです。 PHPは、ローカルホスト上で正しく実行されているとのphp-config設定などLIBS、延長-dirは、

が、彼らは私の同僚のいくつかに話す、含みの正しい場所を指している上にインストールされている

Undefined symbols: 
    "__php_stream_open_wrapper_ex", referenced from: 
     _tree_load_xdf in tree.lo 
     _tree_save_xdf in tree.lo 
     _tree_cache_control in tree.lo 
     _get_cache_header in tree.lo 
     _log_cache_hits in tree.lo 
     _log_cache_hits in tree.lo 
     _log_cache_err in tree.lo 
     _buf_load_file in buffer.lo 
     _buf_save_file in buffer.lo 
    "_php_info_print_table_start", referenced from: 
     _zm_info_xtree in xtree.lo 
    "_zend_list_insert", referenced from: 
     _zif_xtree_load in xtree.lo 
     _zif_xtree_xchg in xtree.lo 
     _zif_xtree_new in xtree.lo 

リンカーがライブラリを動的に正しく指していないことを示します。しかし、彼はこれを修正する方法を知っているMac OSのリンカーに慣れていませんでした。

アイデア?

UPDATE

私はまた、次のように私にはなく、運のいずれかと提案しなければならなかった:まだ助けを求めて

Anyways, here's a few random things you could try: 

- In the linker line of the Makefile (starts with "gcc -shared"), add 
the "-dynamiclib" parameter after "gcc". You may also need to remove 
the "-shared" and/or "-rdynamic" parameters. 

- In the linker line, add "-bundle -flat_namespace -undefined 
suppress". Again, you may need to dump "-shared" and/or "-rdynamic". 

。ありがとう!

+0

'は/ opt/local/binに/ PHP-config設定--libs'行うと、他の人が働きますか?また、私は '$(PHPLIBS)'がどこかで使われることを期待しています。 – Wodin

+0

はい、/ opt/local/bin/php-config --libsなどが動作します。 – janiv

答えて

0

変更してみてください。これに

${XTREE_LIB} : ${OBJS} 
    gcc -shared -L/usr/local/lib -rdynamic -o ${XTREE_LIB} ${OBJS} 

${XTREE_LIB} : ${OBJS} 
    gcc -shared -L/usr/local/lib -rdynamic -o ${XTREE_LIB} ${OBJS} $(PHPLIBS) 
+0

運がない。同じエラーが報告されます。 – janiv

関連する問題