MacOS M1上PHP的Firebird扩展
我已经安装了PHP7.4和homebrew和Xcode命令行工具。
我按照这里的源代码库的说明进行操作,使用以下方法,我已经更改了https://github.com/FirebirdSQL/php-firebird公式以适合MacOS库的位置,就像这里的答案Issues compiling firebird driver for PHP-7.4 on macos一样
git clone https://github.com/FirebirdSQL/php-firebird.git
cd php-firebird
phpize
CPPFLAGS=-I/Library/Frameworks/Firebird.framework/Headers LDFLAGS=-L/Library/Frameworks/Firebird.framework/Resources/lib ./configure
make我得到的错误是
configure: error: libfbclient, libgds or libib_util not found! Check config.log for more information.在日志文件中,它指的是以下问题的症结所在
ld: warning: ignoring file /opt/firebird/lib/libib_util.dylib, building for macOS-arm64 but attempting to link with file built for macOS-x86_64问题是Mac的Firebird包只针对64位架构构建,而不是针对ARM架构。
发布于 2021-11-13 15:36:34
解决方案
我似乎总是很难在MacOS (英特尔或M1)上为火鸟构建扩展,在留下这个问题一个月后,我发现了一个解决方案,我在这里留给所有遇到这堵墙的人,直到ARM在火鸟的MacOS上得到支持,我们可能不得不用64位运行64位版本。下面的步骤应该可以让您启动并运行。我想出了两个解决方案,第一个最明显的就是创建一个docker版本。
Docker解决方案
docker run -v $(pwd):/app tina4stack/php -ini | grep interbaseHome brew解决方案
第二个解决方案(更复杂)是遵循这些步骤,我并不总是喜欢为简单的事情运行docker引擎。
安装适用于MacOS的最新Firebird
首先,确保您已经安装了最新的Firebird MacOS包,在撰写本文时,Firebird 3.0只有一个可以安装。
我遇到的下一个问题是home-brew安装了一个ARM版本的PHP,这使得与x86_64架构的链接变得不可能。向这里的文档致敬https://austencam.com/posts/setting-up-an-m1-mac-for-laravel-development-with-homebrew-php-mysql-valet-and-redis
安装Rosetta
首先我安装了Rosetta (帮助在MacOS ARM上运行64位应用程序)
/usr/sbin/softwareupdate --install-rosetta --agree-to-license安装适用于64位架构的Home-brew
接下来,我删除了homebrew并使用arch -x86_64位标志重新安装了它
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)"arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"安装PHP7.4
然后安装了一个新的php@7.4
arch -x86_64 brew install php@7.4编译扩展
git clone https://github.com/FirebirdSQL/php-firebird.git
cd php-firebird
phpize
CFLAGS='-arch x86_64' CPPFLAGS=-I/Library/Frameworks/Firebird.framework/Headers LDFLAGS=-L/Library/Frameworks/Firebird.framework/Resources/lib ./configure
make
sudo make install将它们捆绑在一起
我在php.ini文件中添加了以下内容
extension=interbase如果您不知道在哪里编辑ini文件,请运行以下命令:
php -ini | grep php.ini当我运行php firebird | grep interpose时,我得到了关于找不到-ini库的错误。最后,我将库复制到PHP bin和lib文件夹中
cp /Library/Frameworks/Firebird.framework/Resources/lib/* /usr/local/Cellar/php@7.4/7.4.25/libcp /Library/Frameworks/Firebird.framework/Resources/lib/* /usr/local/Cellar/php@7.4/7.4.25/bin我相信有人会评论说让上面的代码更简洁一些,但我很高兴地发现ini命令现在如预期的那样返回了。
php -ini | grep interbase
interbase如果你遇到了我没有发现的问题,请告诉我,还有一些我尝试过的Firebird库解决方案,但我不确定它们是否有效。
https://stackoverflow.com/questions/69955752
复制相似问题