Я думаю, что мне нужно знать, как указать архитектуру сборки при сборке расширений .php в OSX.
Каковы вероятные архитектуры, которые я должен попробовать в первую очередь, и как их указать?
Детали:
У меня проблемы с созданием работающего расширения mssql.so php для моего сервера.
Я использовал сервер AMPPS на Mac для обслуживания веб-сайтов на основе php и доступа к базам данных MySQL.
Теперь мне нужно подключиться к базе данных MSSQL. Установка php AMPPS не включает расширение mssql, поэтому, когда я пытаюсь использовать mssql_connect()
Я получаю следующую ошибку.
Call to undefined function `mssql_connect()` in /Applications/AMPPS/www/test.php
Я думаю, что мне нужно добавить mssql.so в папку php / lib / extensions / ext, а затем добавить
extension=mssql.so
в мой файл php.ini.
Для создания mssql.so я нашел пару онлайн-уроков, в которых оба используют Freetds:
http://lkrms.org/php-with-freetds-on-os-x-mavericks/#comment-82521
http://blog.benjaminwalters.net/?p=10
Я использовал home brew для установки autoconf:
brew instal autoconf
Затем я скачал и установил freetds:
./configure --prefix=/usr/local/freetds --sysconfdir=/usr/local/freetds/conf/freetds --disable-libiconv --disable-odbc
make
sudo make install
Freetds был установлен в / usr / local / freetds. Затем я скачал php. Я пробовал это со всеми версиями, доступными для загрузки 5.6.2, 5.5.18, 5.4.32 и 5.3.29. 5.3.29 возникла проблема, и я не смог сгенерировать mssql.so.
Все остальные версии были успешно созданы mssql.so с использованием следующего метода:
Распакуйте пакет в папку для скачивания
cd php-5.4.17/ext/mssql
phpize
./configure --with-php-config=/usr/bin/php-config --with-mssql=/usr/local/freetds
make
Затем я копирую сгенерированный файл mssql.so в /Applications/AMPPS/php-5.4/lib/extensions/ext и добавляю его в файл php.ini.
extension=mssql.so
Я перезапускаю сервер apache и просматриваю файл ошибки / журнала, в котором есть следующая ошибка:
PHP Warning: PHP Startup: Unable to load dynamic library '/Applications/AMPPS/php-5.4/lib/extensions/ext/mssql.so' - dlopen(/Applications/AMPPS/php-5.4/lib/extensions/ext/mssql.so, 9): no suitable image found. Did find:\n\t/Applications/AMPPS/php-5.4/lib/extensions/ext/mssql.so: mach-o, but wrong architecture in Unknown on line 0
Похоже, что я создал mssql.so для неправильной архитектуры?
Я посмотрел на вывод терминала, когда настраивал «make» для mssql.so, и обнаружил следующее, указывающее архитектуру, для которой он создается:
checking build system type... i386-apple-darwin13.1.0
checking host system type... i386-apple-darwin13.1.0
checking target system type... i386-apple-darwin13.1.0
Похоже, я сделал это для i386. Здесь я начинаю путаться.
После того, как терминал make заставляет меня выполнить команду «make test», я делаю это и получаю следующий вывод:
=====================================================================
PHP : /usr/bin/php PHP_SAPI : cli PHP_VERSION : 5.4.24
ZEND_VERSION: 2.4.0 PHP_OS : Darwin - Darwin myMac13.1.0 Darwin
Kernel Version 13.1.0:
Thu Jan 16 19:40:37 PST 2014;
root:xnu-2422.90.20~2/RELEASE_X86_64 x86_64
INI actual : /Users/user/downloads/php-5.6.2/ext/mssql/tmp-php.ini More .INIs :
CWD : /Users/user/Downloads/php-5.6.2/ext/mssql Extra dirs :
VALGRIND:Notused
===================================================================TIME START 2014-10-26 11:53:50
=====================================================================
Тесты не проводились. Это не говорит, почему никакие тесты не были выполнены, что расстраивает. В нем упоминается x86_64, который не является i386.
Я попытался проверить, какая архитектура моей системы, чтобы убедиться, что это i386 или x86_64.
Я сделал это с uname и arch следующим образом:
uname -p
i368
uname -m
x86_64
arch
i386
Таким образом, аппаратное обеспечение моей машины — x86_64 (uname -m), а архитектура процессора — i386 (uname -p). Я не понимаю, как они могут отличаться или каковы последствия этого.
Так я построил mssql.so для неправильной архитектуры или я сделал что-то еще неправильно? Если я построил его для неправильной архитектуры, то как мне настроить его для правильной?
Большое спасибо за любую помощь с этим.
Задача ещё не решена.
Других решений пока нет …