Расширение PHP не компилируется в Mac OS 10.6 - PullRequest
0 голосов
/ 18 декабря 2010

Я пытаюсь скомпилировать расширение PHP с именем xtree в Mac OS 10.6, но у меня возникло несколько ошибок, связанных с отсутствующими символами. Я смог успешно скомпилировать его на компьютере под управлением Debian 4 без пропущенных ошибок символов.

Makefile выглядит как:

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 $@ $<

${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.

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 правильно работает на локальном хосте, а php-config указывает на правильное местоположение для include, libs, extension-dir и т. Д.

В разговоре с некоторыми из моих коллег они говорят, что компоновщик не правильно указывает на библиотеки динамически. Однако он не был знаком с компоновщиком 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".

Все еще в поисках помощи. Спасибо!

1 Ответ

0 голосов
/ 20 декабря 2010

Попробуйте изменить:

${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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...