【问题标题】:How do I build the Firebird database extension (ext-interbase) for PHP on a MacOS M1 Monterey?如何在 MacOS M1 Monterey 上为 PHP 构建 Firebird 数据库扩展(ext-interbase)?
【发布时间】:2021-12-26 18:28:52
【问题描述】:

MacOS M1 上 PHP 的 Firebird 扩展

我安装了 PHP7.4 和 homebrew 和 Xcode 命令行工具。

我按照此处的源存储库https://github.com/FirebirdSQL/php-firebird 使用以下方法按照说明进行操作,我已根据此处的答案更改了 Linux 公式以适应 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 架构构建。

【问题讨论】:

标签: macos firebird apple-m1


【解决方案1】:

解决方案

我似乎总是很难在 MacOS(Intel 或 M1)上构建 Firebird 的扩展,在离开问题一个月后,我发现了解决方案,我为所有遇到此问题的人留在这里,直到 ARM在 MacOS for Firebird 上受支持,我们可能必须使用 64 位 PHP 运行 64 位版本。以下步骤应该可以帮助您启动并运行。我提出了 2 个解决方案,第一个最明显的解决方案是构建 docker。

Docker 解决方案

docker run -v $(pwd):/app tina4stack/php -ini | grep interbase

家酿解决方案

第二种解决方案(更复杂)是遵循这些步骤,我并不总是喜欢为简单的事情运行 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(帮助在 MacOS ARM 上运行 64 位应用程序)

/usr/sbin/softwareupdate --install-rosetta --agree-to-license

为 64 位架构安装 Home-brew

接下来我删除了自制软件并使用 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 -ini | grep interpose 我收到关于找不到火鸟库的错误。最后我将库复制到 PHP bin 和 lib 文件夹中

cp /Library/Frameworks/Firebird.framework/Resources/lib/* /usr/local/Cellar/php@7.4/7.4.25/lib
cp /Library/Frameworks/Firebird.framework/Resources/lib/* /usr/local/Cellar/php@7.4/7.4.25/bin

我相信有人可以评论使上面的内容更整洁,但我很高兴发现 ini 命令现在按预期返回。

php -ini | grep interbase
interbase

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

使用 PECL 安装模块

作为上述解决方案的补充,使用以下命令轻松安装其他 PHP 模块

arch -x86_64 pecl install <module>

例子

arch -x86_64 pecl install openswoole

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 2022-09-23
    • 2010-10-15
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多