Ich versuche, eine PHP-Erweiterung namens Xtree auf Mac OS 10.6 zu kompilieren, aber mehrere Fehler über fehlende Symbole treffen. Ich konnte es erfolgreich auf einem Rechner kompilieren, auf dem Debian 4 läuft, ohne die fehlenden Symbolfehler.PHP-Erweiterung kompiliert nicht auf Mac OS 10.6
Die Make-Datei erscheint als:
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}
Hier ist ein Beispiel von Fehlern sind Ich erhalte, wenn sie auf einem Mac zu kompilieren.
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
PHP auf ordnungsgemäß ausgeführt wird auf localhost und php-config installiert ist an die richtige Stelle zeigt für das beinhaltet, Libs, Erweiterung Verzeichnis etc.
einige Reden von meiner Kollegen sie vorschlagen, dass der Linker nicht korrekt auf die Bibliotheken verweist. Allerdings war er mit dem Mac OS Linker nicht vertraut, um zu wissen, wie er das beheben kann.
Irgendwelche Ideen?
UPDATE
Ich habe auch die mir vorgeschlagen, folgende, aber ohne Glück entweder:
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".
immer noch nach Hilfe suchen. Vielen Dank!
Sie '/ opt/local/bin/php-config --libs' und die anderen arbeiten? Außerdem würde ich erwarten, dass '$ (PHPLIBS)' irgendwo benutzt wird. – Wodin
Ja,/opt/local/bin/php-config --libs und andere funktionieren. – janiv