如何在MacOS上将PHP编译为静态二进制文件?

3

我正在尝试在MacOS上从源代码编译PHP。我使用--enable-static配置选项来构建静态库,就像这样:

./configure --enable-static --disable-all
make

虽然这会生成一个可工作的二进制文件,但如果我使用otool查看二进制文件,我会发现它正在使用两个共享库:libresolv.9.dyliblibSystem.B.dylib

$ otool -L sapi/cli/php   
sapi/cli/php:
    /usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)

有没有一种方法可以静态链接这些库?

这一定是一个重复的问题。我知道如何回答针对 GLibc 的问题。基本上,你不能这么做,除非你想确保你的二进制文件无法工作 - Antti Haapala -- Слава Україні
为什么要使用C标签? - Weather Vane
1
@WeatherVane 基本上这是一个关于 C/C++ 链接的问题,而且是一个通用的问题。 - Antti Haapala -- Слава Україні
1个回答

2
经过调查,似乎无法或不应该将libresolvlibSystem静态链接起来。libSystem包含libc和其他库。 libresolv包含DNS函数,例如res_init。 这两个库都由MacOS提供。 MacOS不支持静态二进制文件

由于这些库在MacOS上始终可用,因此将它们用作共享库是可以的。

如果您需要支持旧版本的MacOS,则可以使用-mmacosx-version-min链接器标志:

LDFLAGS="-mmacosx-version-min=10.7" ./configure --enable-static --disable-all
LDFLAGS="-mmacosx-version-min=10.7" make

您可以使用otool -l命令并检查LC_VERSION_MIN_MACOSX来确认它是否起作用。最初的回答。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接