Я пытаюсь скомпилировать PHP 7.2.3 и установить чистый в /usr/local
с readline
поддержка, так что php -a
даст сеанс интерактивной оболочки.
Я получаю ошибку
clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
Undefined symbols for architecture x86_64:
"_append_history", referenced from:
_readline_shell_run in readline_cli.o
"_history_list", referenced from:
_zif_readline_list_history in readline.o
"_rl_mark", referenced from:
_zif_readline_info in readline.o
"_rl_pending_input", referenced from:
_zif_readline_info in readline.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [libs/libphp7.bundle] Error 1
Кажется, что компиляция PHP не обнаруживает установку readline? Как я могу связать их? Или, по крайней мере, как я могу устранить эту ошибку?
Я начал с
php-7.2.3$ ./configure --without-iconv --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
php-7.2.3$ make
для конфигурации по умолчанию readline.
Когда это не сработало, я скачал и установил свежую readline GNU в /usr/local
с дефолтом
readline-6.3$ ./configure
readline-6.3$ make
readline-6.3$ sudo make install
и то же самое configure
/make
для PHP.
Когда это не сработало, попробуйте более явную ссылку на readline
место установки:
php-7.2.3$ ./configure --without-iconv --with-apxs2=/usr/local/apache2/bin/apxs --with-readline==/usr/local/lib --with-pdo-mysql
и затем снова ищите место установки по умолчанию.
По теории, что, возможно, not found for architecture x86_64
часть ошибки была подсказкой, что это была неправильная архитектура, я пытался скомпилировать readline с
./configure CFLAGS="-arch x86_64" LDFLAGS="-arch x86_64"
Но все эти попытки дали одну и ту же ошибку: append_history
(и другие) является неопределенным символом, на который ссылаются из _readline_shell_run
в readline_cli.o
Попытка погуглить ошибку произвела много обращений, но ответы на них были почти посвящены использованию менеджеров пакетов, таких как apt-get
на Debian или Brew или порты на Mac. Как я могу скомпилировать и установить из исходного кода на Mac? Как я могу связать мой пакет PHP с установленными заголовками readline?
У меня та же ошибка, и я наконец-то решил эту проблему, отредактировав Makefile, сгенерированный после ./configure --xxxxxx
команда
Отредактируйте Makefile и найдите EXTRA_LIBS
, добавьте следующее/usr/local/Cellar/readline/7.0.3_1/lib/libhistory.dylib /usr/local/Cellar/readline/7.0.3_1/lib/
Так что мой EXTRA_LIBS
похоже:
EXTRA_LIBS = -lcrypto -lssl -lcrypto -lz -lresolv -lreadline -lncurses -lz -lcrypto -lssl -lcrypto -lm -lxml2 -lz -licucore -lm -lcurl -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm /usr/local/Cellar/readline/7.0.3_1/lib/libhistory.dylib /usr/local/Cellar/readline/7.0.3_1/lib/libreadline.dylib
просто сохрани его и беги make -j8 && make install
все снова отлично работает.
Других решений пока нет …