2015-06-24 5 views
7

Я пытаюсь скомпилировать PHP 5.6.10 от источника, и я столкнулся со следующей проблемой:Как скомпилировать PHP с OpenSSL на OS X 10.9?

Undefined symbols for architecture x86_64: 
    "_PKCS5_PBKDF2_HMAC", referenced from: 
     _zif_openssl_pbkdf2 in openssl.o 
    "_TLSv1_1_client_method", referenced from: 
     _php_openssl_setup_crypto in xp_ssl.o 
    "_TLSv1_1_server_method", referenced from: 
     _php_openssl_setup_crypto in xp_ssl.o 
    "_TLSv1_2_client_method", referenced from: 
     _php_openssl_setup_crypto in xp_ssl.o 
    "_TLSv1_2_server_method", referenced from: 
     _php_openssl_setup_crypto in xp_ssl.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/libphp5.bundle] Error 1 

OpenSSL устанавливается с помощью Brew. В PHP включен как --with-openssl=/usr/local/Cellar/openssl/1.0.2c

P.S. Прежде чем пытаться использовать только /usr для OpenSSL, но получил ту же ошибку.

+0

Не могли бы вы дать вам Plateform данные и информацию компилятора? – Cyrbil

+0

@cyrbil, что именно вам нужно? – user1692333

+0

Ваша версия ОС 'uname -smorv' и ваш компилятор' gcc -version' (при условии, что вы используете gcc ...) – Cyrbil

ответ

8

Makefile, имеет линию с EXTRA_LIBS, что-то вроде:

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

Удалить все вхождения -lssl и -lcrypto и добавить полный путь к libssl.dylib и libcrypto.dylib(заварной ссылки OpenSSL в/USR/местные/неавтоматического/OpenSSL/Библиотека /)

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

Это также работает для El Capitan 10.11. Спасибо –

+1

Также для El Capitan 10.11.4 с PHP 7.0.5 + OpenSSL 1.0.2g, ручная установка (без варева, без портов). – expora

2

Чтобы следить за ответом Боба Фангера (который работал отлично для меня на OS X 10.11.3), вот литий скрипт, который вы можете запускать из каталога сборки, который делает изменения Makefile:

#!/usr/bin/php 
<?php 
if (true != copy('Makefile', 'Makefile.sav')) 
    die("** cannot copy 'Makefile' to 'Makefile.sav'\n"); 
$lines = file('Makefile'); 
if (false == $lines) 
    die("** connot read 'Makefile'\n"); 
$output = fopen('Makefile', 'wb'); 
if (false == $output) 
    die("** unable to open 'Makefile'\n"); 
foreach ($lines as $line) { 
    if (preg_match('/^EXTRA_LIBS\s+=\s+/', $line)) { 
     $line = preg_replace('/^EXTRA_LIBS\s+=\s+/', 'EXTRA_LIBS = /usr/local/opt/openssl/lib/libssl.dylib /usr/local/opt/openssl/lib/libcrypto.dylib', $line); 
     $line = preg_replace(['/-lssl/', '/-lcrypto/'], [], $line); 
    } 
    if (false === fwrite($output, $line)) 
     die("** writing line to 'Makefile' failed\n"); 
} 
fclose($output); 
echo "Success - your Makefile is set for ssl\n"; 

Наслаждайтесь!

0

если вы используете phpbrew на OSX El Capitan вам необходимо предоставить полный путь к вашему OpenSSL:

phpbrew install php-7.0.4 +openssl=/usr/local/Cellar/openssl/[YOUR OPEN SSL VERSION]

Смежные вопросы