我认为我需要知道的是在OSX上构建.php扩展时如何指定构建体系结构。 我应该首先尝试哪些可能的架构,以及如何指定它们?
细节:
我无法为我的服务器构建一个有效的mssql.so php扩展程序。
我一直在mac上使用AMPPS服务器来提供基于php的网站,访问MySQL数据库。
现在我需要连接到MSSQL数据库。 AMPPS php安装不包含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
我用家酿来安装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?
当我为mssql.so配置“make”时,我查看了终端输出,并发现以下内容指示了它的架构:
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 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还是我做错了什么呢?如果我为错误的架构构建了它,那么如何配置它以构建正确的架构呢?
非常感谢您对此的任何帮助。