compile php with openssl on mac osx error 填坑
原创
©著作权归作者所有:来自51CTO博客作者wx62ccd9cc616d1的原创作品,请联系作者获取转载授权,否则将追究法律责任
从源码手动编译 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