首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MacOS M1蒙特利上构建PHP的火鸟数据库扩展(ext-interbase)?

如何在MacOS M1蒙特利上构建PHP的火鸟数据库扩展(ext-interbase)?
EN

Stack Overflow用户
提问于 2021-11-13 15:36:34
回答 1查看 267关注 0票数 1

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一样

代码语言:javascript
复制
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

我得到的错误是

代码语言:javascript
复制
configure: error: libfbclient, libgds or libib_util not found! Check config.log for more information.

在日志文件中,它指的是以下问题的症结所在

代码语言:javascript
复制
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架构。

EN

回答 1

Stack Overflow用户

发布于 2021-11-13 15:36:34

解决方案

我似乎总是很难在MacOS (英特尔或M1)上为火鸟构建扩展,在留下这个问题一个月后,我发现了一个解决方案,我在这里留给所有遇到这堵墙的人,直到ARM在火鸟的MacOS上得到支持,我们可能不得不用64位运行64位版本。下面的步骤应该可以让您启动并运行。我想出了两个解决方案,第一个最明显的就是创建一个docker版本。

Docker解决方案

代码语言:javascript
复制
docker run -v $(pwd):/app tina4stack/php -ini | grep interbase

Home 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位应用程序)

代码语言:javascript
复制
/usr/sbin/softwareupdate --install-rosetta --agree-to-license

安装适用于64位架构的Home-brew

接下来,我删除了homebrew并使用arch -x86_64位标志重新安装了它

代码语言:javascript
复制
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)"
代码语言:javascript
复制
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

安装PHP7.4

然后安装了一个新的php@7.4

代码语言:javascript
复制
 arch -x86_64 brew install php@7.4

编译扩展

代码语言:javascript
复制
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文件中添加了以下内容

代码语言:javascript
复制
extension=interbase

如果您不知道在哪里编辑ini文件,请运行以下命令:

代码语言:javascript
复制
php -ini | grep php.ini

当我运行php firebird | grep interpose时,我得到了关于找不到-ini库的错误。最后,我将库复制到PHP bin和lib文件夹中

代码语言:javascript
复制
cp /Library/Frameworks/Firebird.framework/Resources/lib/* /usr/local/Cellar/php@7.4/7.4.25/lib
代码语言:javascript
复制
cp /Library/Frameworks/Firebird.framework/Resources/lib/* /usr/local/Cellar/php@7.4/7.4.25/bin

我相信有人会评论说让上面的代码更简洁一些,但我很高兴地发现ini命令现在如预期的那样返回了。

代码语言:javascript
复制
php -ini | grep interbase
interbase

如果你遇到了我没有发现的问题,请告诉我,还有一些我尝试过的Firebird库解决方案,但我不确定它们是否有效。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69955752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档