拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Apache Thrift 在 macOS(OS X)上从源码编译安装的完整指南

Apache Thrift 在 macOSOS X上从源码编译安装的完整指南【免费下载链接】thriftApache Thrift项目地址: https://gitcode.com/GitHub_Trending/thr/thrift本文以 Apache Thrift 官方安装文档 doc/install/os_x.md 为主体系统讲解在 macOS/OS X 系统上从源码构建并安装 Thrift 编译器与各语言库的完整流程包括 Boost、libevent 两大核心依赖的安装细节以及configure关键参数的含义。读完本文你将能够独立完成依赖准备、源码编译、安装验证与常见问题排查并了解 CMake 备选构建方案。构建前的依赖总览在动手之前先明确 Thrift 构建体系对系统环境的要求。根据仓库中的基础需求文档 doc/install/README.md构建 Thrift 需要满足以下条件类别最低要求说明操作系统相对 POSIX 兼容的 *NIX 系统macOS 天然满足Windows 下可用 Cygwin/MingW编译器g 4.2 及以上macOS 上由 Xcode Command Line Tools 提供 clang/gBoost1.56.0C 库构建的硬性依赖configure会做版本校验autoconf2.65用于生成 configure 脚本automake1.13构建系统核心版本不足会直接报错退出libtool1.5.24macOS 下对应glibtoolizepkg-config含 pkg.m4 宏检测 Qt5 等第三方库lex / yacc优先 flex 与 bison编译 IDL 编译器词法/语法分析器所必需libssl-devOpenSSL 开发头文件检测 TLS 支持C/C GLib 库需要其中automake 1.13 是硬性门槛仓库根目录的 bootstrap.sh 中明确写有版本检查逻辑低于 1.13 会打印automake version X is too old (need 1.13 or later)并直接退出。macOS 特有的工具链差异bootstrap.sh 对 macOS 有一个关键适配Apple 系的 libtool 安装后二进制名为glibtoolize而非libtoolize。脚本会先探测libtoolize找不到再回退到glibtoolize。因此在使用 Homebrew 安装 GNU 构建工具时确保glibtoolize位于 PATH 中即可。安装 Boost官方文档给出的 Boost 安装方式是源码编译。从 boost.org 下载源码压缩包后解压进入目录执行./bootstrap.sh sudo ./b2 threadingmulti address-model64 variantrelease stage install这条b2命令的参数含义如下threadingmulti构建多线程版本Thrift 的 C 库依赖 Boost.Threadaddress-model64生成 64 位库与 macOS 默认的 64 位工具链匹配variantrelease仅构建 release 版本减少体积并避免调试符号stage install先生成库文件到stage目录再执行系统安装。为什么必须装 Boostconfigure 的版本校验Boost 不是可选项。在 configure.ac 中C 库的检测直接调用AX_BOOST_BASE([1.56.0])低于 1.56.0 会被判定为不满足要求C 库have_cpp将不会被启用。该宏来自仓库的 aclocal/ax_boost_base.m4其检测逻辑是编译一个引用boost/version.hpp的小程序通过BOOST_VERSION宏数值与要求版本做编译期比较。检测时若未通过--with-boost指定路径宏会依次搜索/usr、/usr/local、/opt、/opt/local这几个常见前缀并会读取$BOOST_ROOT环境变量这对stage 但未安装的 Boost 特别有用。若 Boost 库安装在非标准位置可显式指定--with-boost/path/to/boost如果头文件在标准位置而库文件在别处还可以用--with-boost-libdir/path/to/boost/libs单独指定库目录该宏会覆盖库路径探测结果。此外C 库构建成功后 configure.ac 还会据此推导BOOST_LIB_DIR并链接libboost_chrono、libboost_filesystem、libboost_system、libboost_thread等静态库这解释了为什么 Boost 必须完整构建而不仅是头文件。安装 libeventlibevent 是 Thrift 的可选但推荐依赖用于构建非阻塞服务器。官方文档给出的源码安装方式./configure --prefix/usr/local make sudo make install--prefix/usr/local让 libevent 安装到 Thrift 默认会搜索的路径后续configure无需额外指定即可发现。libevent 在 Thrift 中的角色libevent 支撑的是 C 非阻塞 IO 服务器TNonblockingServer对应 lib/cpp 下的libthriftnb库。若缺失Thrift 仍可编译但非阻塞服务器功能不可用。configure.ac 中通过AX_LIB_EVENT([2.0])检测最低要求libevent 2.0。从 aclocal/ax_lib_event.m4 的源码可见其检测方式编译链接一个包含event.h并调用event_get_version()的程序将返回的版本字符串与要求版本逐字符比较。该宏也支持--with-libeventDIR指定安装前缀或使用$LIBEVENT_ROOT环境变量未指定时默认搜索/usr、/usr/local、/opt、/opt/local、/opt/libevent。链接时使用LIBEVENT_LIBS-levent。编译并安装 Apache Thrift依赖就绪后进入 Thrift 源码目录执行官方文档给出的核心命令./configure --prefix/usr/local/ --with-boost/usr/local --with-libevent/usr/local各参数含义--prefix/usr/local安装根目录最终编译器将位于/usr/local/bin/thrift--with-boost/usr/local告知 configure 从/usr/local查找 Boost与上一节安装位置一致--with-libevent/usr/local告知 configure 从/usr/local查找 libevent。从源码到 configure 的完整流程若从 Git 克隆的源码构建而非官方发布 tarball需先运行 bootstrap.sh 生成 configure 脚本其内部流程为先做make distclean清理再依次调用autoscan、libtoolize/glibtoolize --copy --automake、aclocal -I ./aclocal、autoheader、autoconf、automake --copy --add-missing并如前所述完成 automake 版本检查。完整命令序列为git clone https://github.com/apache/thrift.git # 或使用官方发布 tarball cd thrift ./bootstrap.sh ./configure --prefix/usr/local --with-boost/usr/local --with-libevent/usr/local make sudo make install常用 configure 调优选项configure.ac 提供了丰富的构建开关常见的有--enable-libsno只构建 IDL 编译器跳过所有语言库编译器位于 compiler/cpp产物为compiler/cpp/thrift。当你只需要thrift命令生成代码、不开发 C 服务端时用此选项可免去 Boost/libevent 等全部库依赖--with-languageyes|no按需启用/禁用某语言库由 aclocal/ax_thrift_internal.m4 的AX_THRIFT_LIB宏支持默认值均为yes如--with-javano、--with-pythonno--with-qt5可选启用 Qt5 支持需要 Qt5Core/Qt5Network 与moc对应thrift-qt5库--with-opensslDIROpenSSL 位置由 aclocal/ax_check_openssl.m4 处理用于 C/C GLib 库的 TLS 支持zlibAX_LIB_ZLIB([1.2.3])为可选压缩支持。所有语言库的启用状态在 configure.ac 中按语言逐一检测C、C GLib、Java、Kotlin、Erlang、Node.js、Python、PHP、Ruby、Perl、Go、Rust、Dart、D、Haxe 等并生成对应的AM_CONDITIONAL条件编译开关。验证安装与运行测试安装完成后执行以下命令确认编译器可用thrift --version当前仓库版本为 0.25.0见 configure.ac 中的AC_INIT([thrift], [0.25.0])输出形如Thrift version 0.25.0。需要跑测试套件时使用make check备选方案CMake Xcode 构建编译器如果只需要 IDL 编译器且希望用 CMake 体系compiler/cpp/README.md 提供了更轻量的路径。macOS 上先用 Homebrew 补齐工具brew install flex brew install bison brew install cmake然后在 compiler/cpp 目录下用 Xcode 工程构建mkdir cmake-build cd cmake-build cmake -G Xcode .. cmake --build .常见问题排查configure 报 automake version too oldbootstrap 阶段强校验 automake ≥ 1.13见 bootstrap.sh请通过 Homebrew 安装新版 automake并确认glibtoolize可用。Boost 检测失败确认版本 ≥ 1.56.0库装在非标准位置时用--with-boostDIR或$BOOST_ROOT指定库目录单独指定可用--with-boost-libdir见 aclocal/ax_boost_base.m4。libevent 未找到确认按--prefix/usr/local安装否则用--with-libeventDIR或$LIBEVENT_ROOT指向安装前缀见 aclocal/ax_lib_event.m4。只想用编译器、不想装一堆依赖使用./configure --enable-libsno跳过全部语言库构建。各语言库还有额外依赖例如 Java 需要 JDK 17LTS与 Gradle 8.4PHP 需要 7.1Ruby 需要 bundler详见 doc/install/README.md 的 Language requirements 一节。延伸阅读通用构建需求清单doc/install/README.md其他平台构建参考CentOS 构建指南、Debian 构建指南、Windows 构建指南编译器 CMake 构建细节与 IDE 支持compiler/cpp/README.md构建脚本与 configure 源码bootstrap.sh、configure.ac【免费下载链接】thriftApache Thrift项目地址: https://gitcode.com/GitHub_Trending/thr/thrift创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门