使用 ServBay 进行二次编译
ServBay 为 macOS 和 Windows 用户提供了一个强大且完整的本地 Web 开发环境,其中包含了丰富的软件包和工具。除了 ServBay 预装的软件包版本外,开发者有时可能需要针对特定需求进行二次编译,例如:
- 为某个软件包启用特定的编译选项。
- 添加 ServBay 默认未包含的模块或扩展(如新的 PHP 扩展或 PostgreSQL 模块)。
- 使用不同于 ServBay 默认版本的特定库进行编译。
- 对 ServBay 提供的软件包进行定制化修改。
ServBay 提供了必要的编译环境和工具链,使用户能够方便地完成这些二次编译任务。
要顺利进行二次编译,用户需要对相应操作系统下的软件编译流程有基础了解:
- macOS/Linux:
configure
,make
,make install
等 Unix/Linux 编译工具链 - Windows: Visual Studio 构建系统、MSBuild、cmake 等编译环境
前提条件
在开始二次编译之前,请确保满足以下条件:
安装 ServBay Development Library: 这是进行二次编译的核心依赖。该软件包包含了 ServBay 环境中用于编译所需的所有库文件、头文件等开发资源。您可以通过 ServBay 应用界面的软件包面板找到并安装它。
安装开发工具集:
macOS
安装 Xcode Command Line Tools: 这是 macOS 系统提供的基本开发工具集,包含编译器(Clang)、链接器等必备工具。打开终端,执行以下命令进行安装:
bashxcode-select --install
1如果已经安装,系统会提示。
安装额外的编译工具: 为了编译大多数开源软件,您还需要安装
autoconf
、automake
、libtool
等工具。通常可以使用 Homebrew 包管理器来安装:bashbrew install autoconf automake libtool cmake
1如果您尚未安装 Homebrew,请先参考 Homebrew 官方网站的指引进行安装。
Windows
安装 Visual Studio Build Tools 或 Visual Studio Community: Windows 平台需要 Microsoft Visual C++ 编译器和构建工具。您可以选择以下任一方式:
方式 1: Visual Studio Build Tools(推荐,体积较小)
- 下载并安装 Visual Studio Build Tools
- 在安装过程中,选择 "C++ build tools" 工作负荷
- 确保包含以下组件:
- MSVC v143 - VS 2022 C++ x64/x86 构建工具
- Windows 11 SDK(最新版本)
- CMake 工具
方式 2: Visual Studio Community
- 下载并安装 Visual Studio Community
- 在安装过程中,选择 "使用 C++ 的桌面开发" 工作负荷
- 确保包含 CMake 工具和 Windows SDK
安装额外工具: 对于一些开源项目,您可能还需要安装:
- Git for Windows: 用于下载源代码
- MSYS2 或 vcpkg: 用于管理 C/C++ 库依赖
- Python: 一些构建脚本可能需要 Python
powershell# 使用 chocolatey 安装额外工具(可选) choco install git cmake python msys2
1
2
设置编译环境
安装完 ServBay Development Library 和其他必备工具后,您需要初始化编译环境。这一步主要是设置一系列环境变量,告诉编译器和构建系统 ServBay 的库、头文件和二进制文件在哪里,以便正确地找到依赖并进行链接。
根据不同的操作系统和架构,环境配置有所不同:
macOS
ServBay 的运行环境根据您 Mac 的 CPU 架构分为 Intel 芯片(x86_64)和 Apple Silicon 芯片(Arm64)。您需要根据当前的 ServBay Runtime 架构选择相应的环境初始化命令。
Windows
Windows 版本的 ServBay 支持 x64 架构,安装在 C:\ServBay
目录下。
检查 ServBay Runtime 的 CPU 架构
macOS
您可以通过检查 ServBay bin
目录下任意一个可执行文件的架构来确定。例如,检查 bison
:
bash
# 在终端中执行以下命令检查
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
1
2
3
2
3
bash
# 在终端中执行以下命令检查
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
1
2
3
2
3
Windows
Windows 版本的 ServBay 目前支持 x64 架构。您可以在 PowerShell 中检查可执行文件:
powershell
# 在 PowerShell 中执行以下命令检查
PS> Get-Command "C:\ServBay\bin\bison.exe" | Select-Object -ExpandProperty FileVersionInfo | Select-Object ProductName, FileDescription
1
2
2
或者直接查看文件属性来确认架构信息。
确认架构后,根据结果选择对应的环境初始化脚本。
初始化编译环境变量
根据您的操作系统和架构,选择相应的环境初始化脚本:
macOS
打开一个新的终端窗口,将以下与您 CPU 架构对应的脚本复制并粘贴到终端中执行。这些脚本会设置 ServBay 编译环境所需的各种路径和标志。
bash
# 设置 CPU 核心数,用于并行编译
CPU_NUMBER=$(sysctl -n hw.ncpu)
# ServBay 安装基础路径
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# 软件包目录名称
SERVBAY_PACKAGE_DIR_NAME="package"
# 软件包完整路径
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay 二进制文件路径
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# ServBay 配置文件路径
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# ServBay 变量数据路径
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# ServBay Development Library 安装路径
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# ServBay Development Library 头文件路径
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# ServBay Development Library 库文件路径
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# 当前构建目录
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL 版本信息
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# 构建目标操作系统最低版本
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey 或更高
# 构建 CPU 架构标志
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Arm64 通常不需要 -target 标志
# 设置 C 编译器标志:优化级别、最低 macOS 版本、架构
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 设置链接器标志:运行时库搜索路径 (rpath)、库搜索路径 (-L)、最低 macOS 版本、架构
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 设置 C 预处理器和 CXX 编译器标志:头文件搜索路径 (-I)
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# 设置 C++ 编译器标志:同 CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 设置可执行文件搜索路径:优先使用 ServBay 的 bin/sbin 目录
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# 设置 pkg-config 搜索路径:用于查找库的编译信息
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 指定 pkg-config 工具路径
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# 设置 pkg-config 库目录
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 将系统及 Homebrew 的 bin/sbin 路径添加到 PATH 后,作为备选
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Homebrew 默认安装路径
# 添加 OpenSSL 的库和头文件路径到 LDFLAGS 和 CPPFLAGS
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# 添加 OpenSSL 的 pkgconfig 路径
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# 完成环境变量设置后,您现在可以在此终端窗口中进行编译操作
echo "ServBay Arm64 编译环境已设置。"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
bash
# 设置 CPU 核心数,用于并行编译
CPU_NUMBER=$(sysctl -n hw.ncpu)
# ServBay 安装基础路径
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# 软件包目录名称
SERVBAY_PACKAGE_DIR_NAME="package"
# 软件包完整路径
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay 二进制文件路径
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# ServBay 配置文件路径
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# ServBay 变量数据路径
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# ServBay Development Library 安装路径
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# ServBay Development Library 头文件路径
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# ServBay Development Library 库文件路径
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# 当前构建目录
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL 版本信息
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# 构建目标操作系统最低版本
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey 或更高
# 构建 CPU 架构标志
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# 构建目标平台标志 (Intel 芯片通常需要指定)
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# 设置 C 编译器标志:优化级别、最低 macOS 版本、架构、目标平台
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 设置链接器标志:运行时库搜索路径 (rpath)、库搜索路径 (-L)、最低 macOS 版本、架构、目标平台
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 设置 C 预处理器和 CXX 编译器标志:头文件搜索路径 (-I)
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# 设置 C++ 编译器标志:同 CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 设置可执行文件搜索路径:优先使用 ServBay 的 bin/sbin 目录
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# 设置 pkg-config 搜索路径:用于查找库的编译信息
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 指定 pkg-config 工具路径
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# 设置 pkg-config 库目录
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 将系统及 Homebrew 的 bin/sbin 路径添加到 PATH 后,作为备选
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Homebrew 默认安装路径
# 添加 OpenSSL 的库和头文件路径到 LDFLAGS 和 CPPFLAGS
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# 添加 OpenSSL 的 pkgconfig 路径
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# 完成环境变量设置后,您现在可以在此终端窗口中进行编译操作
echo "ServBay x86_64 编译环境已设置。"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Windows
对于 Windows 平台,需要在 PowerShell 或 Developer Command Prompt 中设置环境变量。以下脚本适用于 Windows x64 架构:
powershell
# 设置 CPU 核心数,用于并行编译
$CPU_NUMBER = (Get-WmiObject -Class Win32_Processor).NumberOfLogicalProcessors
# ServBay 安装基础路径 (Windows)
$SERVBAY_BASE_FULL_PATH = "C:\ServBay"
# 软件包目录名称
$SERVBAY_PACKAGE_DIR_NAME = "package"
# 软件包完整路径
$SERVBAY_PACKAGE_FULL_PATH = "${SERVBAY_BASE_FULL_PATH}\${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay 二进制文件路径
$SERVBAY_BIN_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\bin"
$SERVBAY_SBIN_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\sbin"
# ServBay 配置文件路径
$SERVBAY_ETC_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\etc"
# ServBay 变量数据路径
$SERVBAY_VAR_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\var"
# ServBay Development Library 安装路径
$SERVBAY_COMMON_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\common"
# ServBay Development Library 头文件路径
$SERVBAY_COMMON_INCLUDE_PATH = "${SERVBAY_COMMON_PATH}\include"
# ServBay Development Library 库文件路径
$SERVBAY_COMMON_LIB_PATH = "${SERVBAY_COMMON_PATH}\lib"
$SERVBAY_COMMON_LIBEXEC_PATH = "${SERVBAY_COMMON_PATH}\libexec"
$SERVBAY_COMMON_SHARE_PATH = "${SERVBAY_COMMON_PATH}\share"
$SERVBAY_COMMON_DOC_PATH = "${SERVBAY_COMMON_PATH}\doc"
# 当前构建目录
$SERVBAY_BUILD_DIR = Get-Location
$SERVBAY_BUILD_SRC_DIR = "${SERVBAY_BUILD_DIR}\src"
# OpenSSL 版本信息 (Windows)
$OPENSSL_SELECTED_VERSION = "3.2"
$OPENSSL_VERSION = "3.2.1"
# Windows 构建配置
$BUILD_PLATFORM = "x64"
$BUILD_CONFIG = "Release"
# 设置环境变量
$env:SERVBAY_BASE_FULL_PATH = $SERVBAY_BASE_FULL_PATH
$env:SERVBAY_COMMON_PATH = $SERVBAY_COMMON_PATH
$env:SERVBAY_COMMON_INCLUDE_PATH = $SERVBAY_COMMON_INCLUDE_PATH
$env:SERVBAY_COMMON_LIB_PATH = $SERVBAY_COMMON_LIB_PATH
# 设置 PATH 环境变量:优先使用 ServBay 的 bin/sbin 目录
$env:PATH = "${SERVBAY_BIN_PATH};${SERVBAY_SBIN_PATH};$env:PATH"
# 设置编译器相关环境变量
$env:INCLUDE = "${SERVBAY_COMMON_INCLUDE_PATH};$env:INCLUDE"
$env:LIB = "${SERVBAY_COMMON_LIB_PATH};$env:LIB"
$env:LIBPATH = "${SERVBAY_COMMON_LIB_PATH};$env:LIBPATH"
# 设置 pkg-config 相关变量(如果可用)
$env:PKG_CONFIG_PATH = "${SERVBAY_COMMON_LIB_PATH}\pkgconfig"
# 添加 OpenSSL 的库和头文件路径
$env:INCLUDE = "${SERVBAY_COMMON_PATH}\openssl\${OPENSSL_SELECTED_VERSION}\include;$env:INCLUDE"
$env:LIB = "${SERVBAY_COMMON_PATH}\openssl\${OPENSSL_SELECTED_VERSION}\lib;$env:LIB"
# 设置 CMAKE 相关变量
$env:CMAKE_PREFIX_PATH = $SERVBAY_COMMON_PATH
$env:CMAKE_INSTALL_PREFIX = $SERVBAY_COMMON_PATH
# 完成环境变量设置
Write-Host "ServBay Windows x64 编译环境已设置。"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
对于使用 Developer Command Prompt 的用户,也可以使用批处理脚本:
batch
@echo off
REM 设置 ServBay Windows 编译环境
REM ServBay 安装基础路径
set SERVBAY_BASE_FULL_PATH=C:\ServBay
set SERVBAY_PACKAGE_FULL_PATH=%SERVBAY_BASE_FULL_PATH%\package
REM ServBay 路径设置
set SERVBAY_BIN_PATH=%SERVBAY_PACKAGE_FULL_PATH%\bin
set SERVBAY_COMMON_PATH=%SERVBAY_PACKAGE_FULL_PATH%\common
set SERVBAY_COMMON_INCLUDE_PATH=%SERVBAY_COMMON_PATH%\include
set SERVBAY_COMMON_LIB_PATH=%SERVBAY_COMMON_PATH%\lib
REM OpenSSL 版本
set OPENSSL_SELECTED_VERSION=3.2
REM 设置环境变量
set PATH=%SERVBAY_BIN_PATH%;%PATH%
set INCLUDE=%SERVBAY_COMMON_INCLUDE_PATH%;%SERVBAY_COMMON_PATH%\openssl\%OPENSSL_SELECTED_VERSION%\include;%INCLUDE%
set LIB=%SERVBAY_COMMON_LIB_PATH%;%SERVBAY_COMMON_PATH%\openssl\%OPENSSL_SELECTED_VERSION%\lib;%LIB%
set CMAKE_PREFIX_PATH=%SERVBAY_COMMON_PATH%
echo ServBay Windows 编译环境已设置完成。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
重要提示: 这些环境变量仅在当前终端会话中生效。如果您关闭终端或打开新的终端窗口,需要重新执行相应的脚本来设置编译环境。
编译示例
在设置好编译环境的终端窗口中,您现在可以下载源代码并进行编译了。以下是几个常见的跨平台编译示例。
编译 ImageMagick
ImageMagick 是一款强大的图像处理库,是 PHP imagick
扩展的依赖。ServBay 在默认安装中已经包含了 ImageMagick,通常无需用户自行编译。这里的示例仅用于演示使用 ServBay 环境编译一个项目的流程。
macOS / Linux
下载 ImageMagick 源代码并解压:
bash# 请根据需要替换为最新版本号 wget https://imagemagick.org/archive/releases/ImageMagick-7.1.1-33.tar.gz tar zxvf ImageMagick-7.1.1-33.tar.gz cd ImageMagick-7.1.1-33
1
2
3
4运行
./configure
脚本: 使用之前设置的环境变量,运行 configure 脚本。--prefix
、--libdir
、--includedir
等选项指定了安装路径,我们将其指向 ServBay Development Library 的公共目录${SERVBAY_COMMON_PATH}
及相关的子目录,这样编译生成的库和头文件就可以被 ServBay 环境中的其他软件(如 PHPimagick
扩展)找到。其他选项根据 ImageMagick 的配置需求设置。bash./configure \ --prefix=${SERVBAY_COMMON_PATH} \ --libdir=${SERVBAY_COMMON_LIB_PATH} \ --includedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --oldincludedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --bindir=${SERVBAY_BIN_PATH} \ --sbindir=${SERVBAY_SBIN_PATH} \ --sysconfdir=${SERVBAY_ETC_PATH} \ --datarootdir=${SERVBAY_COMMON_SHARE_PATH} \ --enable-osx-universal-binary=no \ --disable-silent-rules \ --disable-opencl \ --enable-shared \ --enable-static \ --with-freetype=yes \ --with-gvc=no \ --with-modules \ --with-webp=yes \ --with-heic=no \ --without-gslib \ --with-fpx=no \ --without-openexexr \ --with-raw=yes \ --without-lqr \ --without-djvu \ --without-fftw \ --without-pango \ --without-wmf \ --without-x \ --with-gs-font-dir=${SERVBAY_COMMON_SHARE_PATH}/ghostscript/10.02.1/Resource/Font
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30执行
make
和make install
:make
命令根据配置生成的可执行文件和库进行编译。-j ${CPU_NUMBER}
参数利用多核 CPU 加速编译过程。make install
命令将编译好的文件安装到--prefix
指定的 ServBay Development Library 目录下。bashmake -j ${CPU_NUMBER} make install
1
2
Windows
在 Windows 平台上,ImageMagick 通常需要使用 Visual Studio 或 CMake 来编译。由于 ImageMagick 在 Windows 上的编译相对复杂,建议使用 CMake 方式:
下载 ImageMagick 源代码:
powershell# 使用 curl 或在浏览器中下载 curl -O https://imagemagick.org/archive/releases/ImageMagick-7.1.1-33.tar.gz # 解压缩(需要安装 7zip 或类似工具) tar -xzf ImageMagick-7.1.1-33.tar.gz cd ImageMagick-7.1.1-33
1
2
3
4
5使用 CMake 配置(在 Developer Command Prompt 或 PowerShell 中):
powershell# 创建构建目录 mkdir builddir cd builddir # 使用 CMake 配置项目 cmake .. ` -DCMAKE_INSTALL_PREFIX="$env:SERVBAY_COMMON_PATH" ` -DCMAKE_BUILD_TYPE=Release ` -DBUILD_SHARED_LIBS=ON ` -DMAGICKCORE_QUANTUM_DEPTH=16 ` -DMAGICKCORE_HDRI_ENABLE=OFF ` -DWITH_BZLIB=ON ` -DWITH_ZLIB=ON ` -DWITH_PNG=ON ` -DWITH_JPEG=ON ` -DWITH_TIFF=ON ` -DWITH_FREETYPE=ON ` -DWITH_WEBP=ON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18编译和安装:
powershell# 编译 cmake --build . --config Release --parallel $CPU_NUMBER # 安装 cmake --install . --config Release
1
2
3
4
使用 cmake 编译软件包
对于使用 cmake
构建系统的软件包,编译流程在不同平台上相对统一。以下以 protobuf
(Protocol Buffers) 为例进行说明。
- 下载 protobuf 源代码并进入目录。
macOS / Linux
使用
cmake
配置项目:-S .
指定源代码目录是当前目录,-B builddir
指定在builddir
目录中生成构建文件。-DCMAKE_INSTALL_PREFIX
等选项的作用类似于 Autotools 的--prefix
,指定安装路径到 ServBay Development Library 目录。其他-D
选项是protobuf
特定的编译配置。-DCMAKE_MACOSX_RPATH=1
和-DCMAKE_INSTALL_RPATH
确保编译出的库能够正确找到 ServBay 环境中的其他库。bash# 假设您已进入 protobuf 源代码目录 cmake -S . -B builddir \ -DCMAKE_INSTALL_PREFIX=${SERVBAY_COMMON_PATH} \ -DCMAKE_INSTALL_LIBDIR=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_INSTALL_INCLUDEDIR=${SERVBAY_COMMON_INCLUDE_PATH} \ -DCMAKE_INSTALL_BINDIR=${SERVBAY_BIN_PATH} \ -DCMAKE_INSTALL_SBINDIR=${SERVBAY_SBIN_PATH} \ -DCMAKE_INSTALL_SYSCONFDIR=${SERVBAY_ETC_PATH} \ -DCMAKE_INSTALL_DATAROOTDIR=${SERVBAY_COMMON_SHARE_PATH} \ -DCMAKE_MACOSX_RPATH=1 \ -DCMAKE_INSTALL_RPATH=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE \ -DCMAKE_PREFIX_PATH=${SERVBAY_COMMON_PATH} \ -DBUILD_SHARED_LIBS=ON \ -Dprotobuf_BUILD_LIBPROTOC=ON \ -Dprotobuf_BUILD_SHARED_LIBS=ON \ -Dprotobuf_INSTALL_EXAMPLES=OFF \ -Dprotobuf_BUILD_TESTS=OFF \ -Dprotobuf_ABSL_PROVIDER=package \ -Dprotobuf_JSONCPP_PROVIDER=module \ -DCMAKE_CXX_STANDARD=17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21执行
cmake --build
和cmake --install
:cmake --build builddir
在builddir
目录中执行编译。cmake --install builddir
将编译好的文件安装到-DCMAKE_INSTALL_PREFIX
指定的 ServBay Development Library 目录下。bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
Windows
使用
cmake
配置项目(在 PowerShell 或 Developer Command Prompt 中):powershell# 假设您已进入 protobuf 源代码目录 cmake -S . -B builddir ` -DCMAKE_INSTALL_PREFIX="$env:SERVBAY_COMMON_PATH" ` -DCMAKE_BUILD_TYPE=Release ` -DCMAKE_PREFIX_PATH="$env:SERVBAY_COMMON_PATH" ` -DBUILD_SHARED_LIBS=ON ` -Dprotobuf_BUILD_LIBPROTOC=ON ` -Dprotobuf_BUILD_SHARED_LIBS=ON ` -Dprotobuf_INSTALL_EXAMPLES=OFF ` -Dprotobuf_BUILD_TESTS=OFF ` -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ` -DCMAKE_CXX_STANDARD=17
1
2
3
4
5
6
7
8
9
10
11
12执行编译和安装:
powershell# 编译 cmake --build builddir --config Release --parallel $CPU_NUMBER # 安装 cmake --install builddir --config Release
1
2
3
4
编译 PHP 模块
如果您需要为 ServBay 中某个版本的 PHP 编译额外的扩展模块(例如 swoole
, redis
, mongodb
等),请参考专门的文档:
编译 PostgreSQL 模块
如果您需要为 ServBay 中某个版本的 PostgreSQL 编译额外的模块,请参考专门的文档:
总结
通过 ServBay 提供的 Development Library 和完善的环境变量设置,开发者可以轻松地在 macOS 和 Windows 平台上进行软件包的二次编译和定制。这为您提供了极大的灵活性,以满足特定的项目需求或使用最新的库版本。
关键要点
- 跨平台支持: ServBay 现在同时支持 macOS 和 Windows 平台的编译环境
- 路径差异: 注意不同平台的安装路径(macOS:
/Applications/ServBay
,Windows:C:\ServBay
) - 工具链差异: macOS 使用 Xcode Command Line Tools,Windows 使用 Visual Studio Build Tools
- 环境配置: 根据您的平台选择相应的环境变量配置脚本
注意事项
- 请务必在进行编译前仔细阅读软件包的官方编译指南
- 根据目标平台的特性调整配置和步骤
- Windows 平台建议优先使用 CMake 构建系统
- 某些开源软件可能在不同平台上有不同的编译要求和依赖
通过遵循本文档的指导,您可以在两个平台上都能成功完成 ServBay 环境下的软件包编译任务。