
Apache Thrift 安装指南系统要求、依赖清单与多平台源码构建详解【免费下载链接】thriftApache Thrift项目地址: https://gitcode.com/GitHub_Trending/thr/thriftApache Thrift 是一套跨语言的 RPC 框架与序列化协议实现其工程本身由 IDL 编译器C 编写与覆盖十余种语言C、Java、Python、Go、Ruby、PHP、Rust 等的运行时库组成。本文以仓库 doc/install/README.md 为骨架完整梳理 Thrift 从源码构建所需的基础系统要求、GNU 工具链要求、各语言库的构建依赖并结合 bootstrap.sh、configure.ac、CMakeLists.txt 等仓库文件解释其底层原理随后按 CentOS、Debian/Ubuntu、OS X、Windows 四个平台给出可直接执行的构建步骤与常见排错方案。读完本文你将能独立完成 Thrift 编译器与各语言运行库的源码级安装与验证。基本系统要求Basic requirements根据 doc/install/README.md构建 Apache Thrift 需要满足如下最小环境一个相对符合 POSIX 规范的 *NIX 系统。Windows 上可以使用 Cygwin 或 MinGW 作为替代但存在更好的方案见下文 Windows 章节。g 4.2C 编译器用于编译 Thrift 编译器本体。Boost 1.56.0C 运行库的强依赖构建时由 configure 强制探测见下文源码佐证。编译器解析 IDL 语法需要 lex 和 yacc 的运行时库开发时主要使用 flex 与 bison。这里需要强调一个基本事实Thrift 编译器本体只依赖 C 工具链与 lex/yacc因此仅需要编译器的用户无需安装任何语言运行库各语言运行时库是独立于编译器之外、按需构建的模块。从源码构建的 GNU 工具链要求从源码构建即通过 autotools 流程需要以下 GNU 构建工具工具最低版本作用autoconf2.65由 configure.ac 生成 configure 脚本automake1.13由 Makefile.am 生成 Makefile.inlibtool1.5.24生成平台无关的共享库构建规则pkg-config 宏pkg.m4—configure 中 PKG_CHECK_MODULES 等探测宏的依赖lex / yacc—编译器的词法/语法分析器主要为 flex 和 bisonlibssl-dev—TLS/SSL 支持C/C(glib) 库构建需要源码佐证bootstrap.sh 的完整流程从 Git 仓库而非发布 tarball构建时必须先用 bootstrap.sh 生成 configure 脚本。该脚本的核心步骤与源码一一对应make -k distclean清理上一次构建残留若存在 PHP 扩展源码目录则尝试运行phpize预生成其 configure见 bootstrap.sh探测 libtoolizeOS X 上名为 glibtoolize两者皆无则报错退出bootstrap.sh强制校验 automake 1.13脚本将版本号格式化为数字后比较低于 1.13 直接报错退出bootstrap.sh与 README 的版本要求一致依次执行autoscan、libtoolize --copy --automake、aclocal -I ./aclocal、autoheader、autoconf、automake --copy --add-missing最终生成 configure 与各 Makefile.in。其中aclocal -I ./aclocal指向仓库内 aclocal/ 目录——这里存放了 Thrift 自带的 autoconf 宏如 ax_boost_base.m4、ax_lib_event.m4、ax_check_openssl.m4 等。这也是下文 Cygwin 排错中把系统 pkg.m4 拷贝到 aclocal 目录这一修复手段的由来。源码佐证configure.ac 中的版本约束configure.ac 的开头即固化了两条与 README 对应的硬约束AC_PREREQ(2.65)configure.ac要求 autoconf 2.65AM_INIT_AUTOMAKE([1.13 subdir-objects tar-ustar foreign])configure.ac要求 automake 1.13AC_PROG_BISON(2.5)configure.ac要求 bison 2.5当前仓库版本号为 0.25.0AC_INIT([thrift], [0.25.0])configure.ac。各语言运行库的构建要求Language requirementsREADME 明确指出以下依赖仅在你要构建对应语言的库时才需要。只编译编译器的话全部可以跳过。语言最低版本要求备注CBoost 1.56.0libevent 可选构建 nonblocking server 需要zlib 可选Qt 可选JavaJava 17最新 LTS、Gradle 8.4通过 gradle 构建 lib/javaC#Mono 1.2.4需 pkg-config 探测或 Visual Studio 2005PythonPython 2.6含扩展模块所需的头文件PHPPHP 7.1可选含扩展模块头文件RubyRuby 1.8 bundler gemErlangErlang R12R11 可用但不推荐PerlPerl 5 Bit::Vector Class::AccessorHaxeHaxe 3.1.3GoGo 1.4DelphiDelphi 2010注意README 中部分版本号如 Java 17 / Gradle 8.4为文档撰写时的建议值实际以你所在发行版可用版本为准configure 会在探测失败时自动降级对应语言库的构建详见下文。源码佐证configure 如何按语言探测依赖configure.ac 通过内部宏AX_THRIFT_LIB定义于 aclocal/ax_thrift_internal.m4为每种语言生成--with-lang开关如--with-cpp、--with-java默认值为 yes随后对每种语言做细粒度探测失败则将该语言的have_lang置为 no、跳过构建。关键探测逻辑包括CAX_BOOST_BASE([1.56.0])强制要求 Boost 1.56.0configure.ac并通过AX_LIB_EVENT([2.0])、AX_LIB_ZLIB([1.2.3])、Qt5 探测Qt5Core 5.0, Qt5Network 5.0决定是否启用非阻塞 server、压缩与 Qt 支持configure.acC (GLib)要求glib-2.0 2.0与gobject-2.0 2.0configure.acJava同时要求 JAVA、JAVAC、ANT、GRADLE 四个可执行程序存在configure.acGo解析go version输出并对比 1.4 / 1.7 / 1.18 三个分界版本configure.acRust要求 rustc 1.13 且 cargo 存在configure.acRuby要求 ruby 与 bundle 同时存在configure.acPerl除 perl 外还要求 Bit::Vector、Class::Accessor 两个 CPAN 模块可加载configure.ac。这意味着即使某个语言工具链缺失configure 也不会中止整个构建而是仅跳过该语言库——这与 README 只在需要时安装语言依赖 的建议完全一致。平台专属构建指南CentOS以 6.5 为例doc/install/centos.md 给出了从最小化安装开始、逐步构建的完整流程1. 更新系统并安装平台开发工具sudo yum -y update sudo yum -y groupinstall Development Tools2. 升级 autoconf / automake / bisonCentOS 6.5 自带版本过低需从源码升级sudo yum install -y wget # autoconf 2.69 wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz tar xvf autoconf-2.69.tar.gz cd autoconf-2.69 ./configure --prefix/usr make sudo make install cd .. # automake 1.14 wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz tar xvf automake-1.14.tar.gz cd automake-1.14 ./configure --prefix/usr make sudo make install cd .. # bison 2.5.1 wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz tar xvf bison-2.5.1.tar.gz cd bison-2.5.1 ./configure --prefix/usr make sudo make install cd ..3. 可选安装 C 语言库依赖若只需 IDL 编译器可跳过本节直接进入第 4 步。若要构建 C 共享库需要sudo yum -y install libevent-devel zlib-devel openssl-devel同时升级 Boost 到 1.56 以上README 的硬性要求configure 会强制校验wget http://sourceforge.net/projects/boost/files/boost/1.56.0/boost_1_56_0.tar.gz tar xvf boost_1_56_0.tar.gz cd boost_1_56_0 ./bootstrap.sh sudo ./b2 install4. 构建并安装 Thriftgit clone https://github.com/apache/thrift.git cd thrift ./bootstrap.sh ./configure --with-luano make sudo make install该命令会同时构建编译器与所有探测成功的语言库。构建产物编译器位于thrift/compiler/cpp/thrift可通过thrift --version验证make install后编译器安装在/usr/local/bin/thrift。两个关键开关./configure --enable-libsno只构建 IDL 编译器、跳过所有语言库构建。对应 configure.ac 中AC_ARG_ENABLE([libs], ...)的实现——该开关会把所有with_lang置为 nomake check运行测试套件验证构建结果对应 CMakeLists.txt 中把check注册为ctest别名的做法autotools 流程同样支持。Debian / Ubuntudoc/install/debian.md 提供了极简的一行式安装sudo apt-get install automake bison flex g git libboost-all-dev libevent-dev libssl-dev libtool make pkg-config该命令覆盖了编译器构建所需的全部工具automake、bison、flex、g、libtool、make、pkg-config以及 C 库所需依赖libboost-all-dev、libevent-dev、libssl-dev。旧发行版说明Debian 7 / Ubuntu 12 自带的 automake 与 boost 过旧需要手动升级wget http://ftp.debian.org/debian/pool/main/a/automake-1.15/automake_1.15-3_all.deb sudo dpkg -i automake_1.15-3_all.deb wget http://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz tar xvf boost_1_60_0.tar.gz cd boost_1_60_0 ./bootstrap.sh sudo ./b2 install可选语言包按需安装对应语言的构建依赖语言Debian/Ubuntu 包Javagradle8.4 JDK 1.8如 default-jdkRubyruby-full ruby-dev ruby-rspec rake rubygems bundlerPythonpython-all python-all-dev python-all-dbgPerllibbit-vector-perl libclass-accessor-class-perlPHPphp5-dev php5-cli phpunitC_gliblibglib2.0-devErlangerlang-base erlang-eunit erlang-dev rebarNetStdapt-transport-https dotnet-sdk-6.0 aspnetcore-runtime-6.0Windows 编译器mingw-w64 mingw-w64-x86-64-dev nsisRustrustc cargoHaxehaxeLualua5.3 liblua5.3-devNode.jsnodejs npm其余如 dotnetcore、d-langcurl -fsS https://dlang.org/install.sh | bash -s dmd、dart 与 pub 等工具链文档建议按其官方安装方式单独安装。安装完成后同样执行./bootstrap.sh ./configure make sudo make install构建。OS Xdoc/install/os_x.md 给出了 macOS 上的三步流程1. 安装 Boost从 boost.org 下载源码后编译安装注意指定 64 位、多线程、release 变体./bootstrap.sh sudo ./b2 threadingmulti address-model64 variantrelease stage install2. 安装 libevent下载 libevent 源码后编译安装到 /usr/local./configure --prefix/usr/local make sudo make install3. 构建 Thriftconfigure 时显式指定 Boost 与 libevent 的位置./configure --prefix/usr/local/ --with-boost/usr/local --with-libevent/usr/local之后make与sudo make install即可。注意 OS X 上 libtoolize 名为 glibtoolizebootstrap.sh 已做兼容处理bootstrap.sh。Windowsdoc/install/windows.md 将 Windows 环境拆分为Thrift 编译器 EXE与各语言库两部分并给出四种获取编译器的途径按推荐程度排序。方式一使用预编译 EXE最快Thrift 官方提供 Windows 预编译的 thrift.exe无安装程序EXE 即编译器本体下载后放入任意目录即可使用然后按需从源码构建目标语言库。方式二Visual Studio C 构建推荐要求任意较新版本的 Visual Studio C、Flex 与 Bison例如 WinFlexBison 包。直接使用仓库内的 VS 工程 compiler/cpp/compiler.vcxproj 构建编译器把生成的 EXE 拷贝到合适位置即可。少数语言库如 C、C#也在lib/language/目录下提供了 VS 工程文件如 lib/cpp/libthrift.vcxproj而 Java、Ruby、Delphi、PHP 等语言库需要按各语言惯用工具链构建具体步骤见对应lib/ /目录下的 README.md。方式三Cygwin 构建要求Cygwin 或 MinGW。从源码仓库首次构建时需要先生成 configure 脚本./bootstrap.sh随后配置其中 CXXFLAGS 用于规避旧 pthreads 宏未声明导致的编译错误把非可移植的PTHREAD_MUTEX_RECURSIVE_NP替换为新的PTHREAD_MUTEX_RECURSIVEexport CXXFLAGS-D PTHREAD_MUTEX_RECURSIVE_NPPTHREAD_MUTEX_RECURSIVE ./configure若在根目录 make 出错可只编译编译器进入编译器目录再 makecd compiler/cpp make make install若从根目录执行 make 则会同时构建编译器与各语言运行库。Cygwin 构建的已知问题与规避方案见下文常见问题。方式四MinGW 构建要求MinGW编译出的程序不依赖 cygwin.dll。额外步骤把C:\MINGW\BIN加入 Windows PATH打开 compiler/cpp/Makefile.am在thrift_CXXFLAGS中追加-DMINGW -mno-cygwin -lfl运行./bootstrap.sh确保 java 在 PATH 中必要时export PATH$PATH:/cygdrive/c/program files/java/jre1.8.0_191/bin使用与 Cygwin 相同的 CXXFLAGS 工作区运行./configure用mingw32-make.exe执行构建只编编译器则先cd compiler/cpp。常见问题与排错以下问题均记录在 doc/install/windows.md 中主要在 Cygwin/MinGW 环境下出现。1. configure 出现syntax error near unexpected token MONO报错形如./configure: line 21183: syntax error near unexpected token MONO,根因是 configure 缺少 pkg-config 的宏定义文件 pkg.m4。解决找到系统 pkg.m4由 pkg-config 包安装通常在/usr/share/aclocal/pkg.m4拷贝到仓库的 aclocal 目录后重新执行 bootstrap 与 configurecp /usr/share/aclocal/pkg.m4 aclocal ./bootstrap.sh ./configure若 /usr/share/aclocal 下没有 pkg.m4说明 pkg-config 未安装。2. Perl 运行库安装时报 chmod 错误若不需要 Perl 库configure 时加上--without-perl跳过若必须使用 Perl 且愿意手动安装可在构建后手工处理 lib/perl 目录的安装。3. 静态库 libthrift.a 链接失败缺失 vtable/exception 符号规避方案是绕开-lthrift直接链接构建产物目录下的目标文件THRIFT_Opath to/thrift/lib/cpp LTHRIFT$(THRIFT_O)/Thrift.o $(THRIFT_O)/TSocket.o $(THRIFT_O)/TBinaryProtocol.o $(THRIFT_O)/TBufferTransports.o然后用$(LTHRIFT)代替-lthrift参与链接。4. C 程序在 fork() 后 throw 导致段错误Cygwin 1.7.5-1 g-4.3.4该问题为旧 Cygwin 版本缺陷规避方案是改用 g-3 编译Cygwin 1.7.5-1 之后的版本或 g 4.5.0 以上已修复。5. MinGW 环境下的专项问题yywrap is not found确保 CXXFLAGS 中带有-lfl必要时追加-Lc:/cygwin/libsboost is not found手工修正 compiler/cpp/Makefile 中的BOOST_CPPFLAGS改用 Windows 风格路径例如BOOST_CPPFLAGS -Ic:/cygwin/usr/include/boost-1_53_0realpath is not found在 Makefile 的CXXDEFS变量中加入-DMINGW -mno-cygwin。常用构建选项与验证综合 configure.ac 与 CMakeLists.txt以下选项在安装场景中最常用选项效果--enable-libsno仅构建 IDL 编译器跳过全部语言库--with-langno单独禁用某个语言库如--with-luano、--with-perlno用法由 aclocal/ax_thrift_internal.m4 的AC_ARG_WITH生成--prefixdir指定安装前缀默认 /usr/localmake check运行测试套件CMake 下等价于ctest除 autotools 外仓库还提供 CMake 构建路径根目录 CMakeLists.txt要求 CMake 3.16当前版本 0.25.0。其BUILD_COMPILER选项控制是否构建thrift-compiler目标THRIFT_COMPILER变量可指向外部编译器以支持交叉编译CMakeLists.txt。构建完成后的验证建议运行thrift --version确认编译器版本用仓库自带的 IDL 文件做冒烟测试例如对 test/ThriftTest.thrift 执行thrift --gen lang test/ThriftTest.thrift验证目标语言代码生成是否正常运行make checkautotools或ctestCMake执行完整测试套件。整体上Thrift 的安装遵循编译器轻量、语言库按需的原则先满足 POSIX 系统 g Boost flex/bison 的最小集再按目标语言补齐对应工具链最后用 bootstrap.sh → configure → make → make install 的标准四步完成构建。掌握 doc/install/README.md 与 doc/install/ 目录下的平台指南后即可在任何主流操作系统上复现这一流程。【免费下载链接】thriftApache Thrift项目地址: https://gitcode.com/GitHub_Trending/thr/thrift创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考