使用mac上的readline支持编译PHP?

时间:2018-03-21 22:16:27

标签: php macos unix compilation install

我正在尝试编译PHP 7.2.3并在/usr/local支持readline的情况下安装clean,以便php -a提供交互式shell会话。

我一直收到错误

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配置。

当这不起作用时,我在/usr/local中下载并安装了一个新的GNU读取行,默认

readline-6.3$ ./configure
readline-6.3$ make
readline-6.3$ sudo make install
对于PHP,

configure / make相同。

如果不起作用,请尝试更明确地引用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_runreadline_cli.o引用的未定义符号

谷歌搜索错误产生了很多点击,但那些有回复的人几乎都是在debian或brew上使用包管理器,例如apt-get或在mac上使用端口。如何在mac上从源代码编译和安装?如何将我的PHP包链接到已安装的readline标题?

1 个答案:

答案 0 :(得分:0)

我有同样的错误,最后通过编辑./configure --xxxxxx命令后生成的Makefile解决了这个问题

编辑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,一切都会恢复正常。