从源码手动编译 PHP 时出现如下错误:

 

 

 

 

 

Default

 

Undefined symbols forarchitecture x86_64:
"_PKCS5_PBKDF2_HMAC",referenced from:
_zif_openssl_pbkdf2 inopenssl.o
"_TLSv1_1_client_method",referenced from:
_php_openssl_setup_crypto inxp_ssl.o
"_TLSv1_1_server_method",referenced from:
_php_openssl_setup_crypto inxp_ssl.o
"_TLSv1_2_client_method",referenced from:
_php_openssl_setup_crypto inxp_ssl.o
"_TLSv1_2_server_method",referenced from:
_php_openssl_setup_crypto inxp_ssl.o
ld:symbol(s)notfound forarchitecture x86_64
clang:error:linker command failed with exit code1(use-vtosee invocation)
make:***[libs/libphp5.bundle]Error1

 

解决办法

MakeFile 里面找到类似下面这一行:


Default

 

EXTRA_LIBS=-lresolv-lmcrypt-lltdl-liconv-lm-lxml2-lcurl-lssl-lcrypto

删除所有的 -lssl 和 -lcrypto 然后添加 libssl.dylib 和 libcrypto.dylib 的路径(如果你安装了 brew,那么则是 /usr/local/opt/openssl/lib/),重新运行 make 命令,done。

附上我修改后的 MakeFile EXTRA_LIBS 那一行:

 

 


Default

EXTRA_LIBS=-lz-lresolv-lmcrypt-lltdl-lstdc++-liconv-liconv-lpng-lz-lcurl-lz-lm-lxml2-lz-licucore-lm-lcurl-lxml2-lz-licucore-lm-licui18n-licuuc-licudata-licuio-lxml2-lz-licucore-lm-lxml2-lz-licucore-lm-lxml2-lz-licucore-lm-lxml2-lz-licucore-lm/usr/local/opt/openssl/lib/libssl.dylib/usr/local/opt/openssl/lib/libcrypto.dylib

 

The Makefile has a line with ​​EXTRA_LIBS​​, something like:

EXTRA_LIBS = -lresolv -lmcrypt -lltdl -liconv-lm -lxml2 -lcurl -lssl -lcrypto

Remove all occurrences of ​​-lssl​​​ and ​​-lcrypto​​​ and add the full path to ​​libssl.dylib​​​ and ​​libcrypto.dylib​​ (brew links openssl to /usr/local/opt/openssl/lib/)

EXTRA_LIBS = -lresolv -lmcrypt /usr/local/opt/openssl/lib/libssl.dylib /usr/local/opt/openssl/lib/libcrypto.dylib -lltdl -liconv-lm -lxml2 -lcurl

 

作者:​​sunsky303​​