ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Apache Thrift Windows 环境搭建与编译器构建完全指南(预编译 EXE / Visual Studio / Cygwin / MinGW)

Apache Thrift Windows 环境搭建与编译器构建完全指南(预编译 EXE / Visual Studio / Cygwin / MinGW) Apache Thrift Windows 环境搭建与编译器构建完全指南预编译 EXE / Visual Studio / Cygwin / MinGW【免费下载链接】thriftApache Thrift项目地址: https://gitcode.com/GitHub_Trending/thr/thrift本篇技术指南以 Apache Thrift 官方 Windows 安装文档为主线系统讲解在 Windows 平台搭建 Thrift 开发环境的三条可行路径直接使用预编译的 Thrift 编译器 EXE、通过 Visual Studio C 工程从源码构建推荐、以及基于 Cygwin/MinGW 的类 Unix 构建流程并逐一剖析各路径下常见的编译错误与解决方案。读完本文你将能独立完成 Windows 上的 Thrift 编译器安装、各语言运行时库的构建决策并具备排查./configure语法错误、yywrap not found、boost not found、链接失败等高频问题的实战能力。环境组成编译器 EXE 语言运行时库在动手之前需要先明确 Thrift 环境由两个相互独立的部分组成参见 doc/install/windows.mdThrift 编译器compiler一个可执行程序thrift.exe/thrift负责把.thriftIDL 文件解析并生成各语言的目标代码语言相关运行时库runtime libraries面向 C、Java、Python、PHP、Ruby、Delphi 等语言的库绝大多数需要针对目标语言各自的构建工具链单独编译和安装。围绕编译器这一部分官方提供了三条可选的获取路径方案说明推荐度预编译 EXE直接下载官方构建好的thrift.exe只从源码构建所需语言的库最省事Visual Studio C 工程使用仓库内自带的compiler.vcxproj构建编译器最推荐Cygwin / MinGW在类 Unix 环境中走bootstrap.shconfiguremake经典流程可行但繁琐、耗时、需更多手工操作下文依次展开。无论选择哪条路径构建完编译器后都还需要回到“语言库的构建与安装”环节见各路径的对应小节。方案一使用预编译的 Thrift 编译器 EXEWindows 平台的 Thrift 编译器以预编译 EXE 形式分发可从 Apache 官方下载站点获取。需要注意两点没有安装程序installer这个 EXE 文件本身就是 Thrift 编译器工具无需任何安装步骤下载后将文件放到你选定的任意合适目录即可直接使用通常建议放入一个便于 PATH 引用的目录。完成 EXE 就位后直接跳到下文对应语言的“构建并安装目标语言库”小节继续。从源码结构看编译器的主入口位于 compiler/cpp/src/thrift/main.cc其可执行产物名称为thrift见 compiler/cpp/Makefile.am 中的bin_PROGRAMS thrift预编译 EXE 即该产物的 Windows 形态。方案二通过 Visual Studio C 从源码构建推荐Thrift 编译器使用 C 编写并力求跨平台但对构建环境有一定要求各语言的运行时库则使用对应语言编写构建特定语言接口时需要安装相应语言的工具链。环境要求RequirementsVisual Studio C任意较新版本即可仓库中的工程文件指定了较新的平台工具集见下文Flex 与 Bison推荐使用 WinFlexBison 软件包编译器词法/语法分析器生成所依赖的工具Apache Thrift 通用构建要求完整的依赖清单见 doc/install/README.md其中与 Windows 编译器构建相关的条目为Visual Studio C、Flex 和 Bison例如 WinFlexBison 软件包。构建并安装编译器在所有依赖就绪后使用仓库根目录下的 Visual Studio 工程 compiler/cpp/compiler.vcxproj 构建 Thrift 编译器然后将生成的 EXE 复制到任意目标位置。从该工程文件可以确认以下实现细节工程同时提供Debug / Release×Win32 / x64四种配置Release 配置启用了WholeProgramOptimization全程序优化工程内显式包含词法/语法分析器的输入文件 compiler/cpp/src/thrift/thrifty.yy 与 compiler/cpp/src/thrift/thriftl.ll以及由 flex/bison 生成的thrifty.cc、thriftl.cc——这正是要求先装好 Flex/Bison 的原因工程引入了 Windows 专用头文件 compiler/cpp/src/thrift/windows/config.h其中通过#ifndef _WIN32 #error This is a Windows header only限制只能在 Windows 编译并为 MSVC 做了strtoll → _strtoi64宏映射与PRIu64/PRIi64格式化宏适配、屏蔽了 4996/4800 弃用警告。补充说明除.vcxproj外仓库还提供了基于 CMake 的 Windows 构建路径详见 compiler/cpp/README.md——既可在 Git Bash 中用cmake -DWITH_SHARED_LIBoff .. cmake --build .构建也可用cmake -G Visual Studio 15 2017 ..生成 VS 工程还支持用cmake -DCMAKE_TOOLCHAIN_FILE../build/cmake/mingw32-toolchain.cmake -DBUILD_COMPILERON -DBUILD_LIBRARIESOFF -DBUILD_TESTINGOFF .. cpack交叉编译并生成 Windows 安装包。若坚持不用 CMake也完全可走本文推荐的.vcxproj路线。构建并安装目标语言库少数语言库如 C、C#也提供了 Visual Studio 工程文件位于仓库lib/language/目录下。例如C 库工程lib/cpp/libthrift.vcxproj另有libthriftnb.vcxproj对应 nonblocking 服务器其余大多数语言包典型如 Java、Ruby、Delphi、PHP必须使用更适合该语言的构建工具手工构建安装。每个语言目录下的README.md都说明了该语言库包的构建与安装细节例如 lib/java/README.md、lib/php/README.md、lib/rb/README.md。各语言的工具链版本要求如 Java 17 Gradle 8.4、PHP 7.1、Ruby bundler gem 等可查阅 doc/install/README.md 的“Language requirements”一节。方案三通过 Cygwin 从源码构建环境要求Cygwin 或 MinGWApache Thrift 通用构建要求见 doc/install/README.md其中“从源码构建”所需的核心工具为 GNU 构建工具链autoconf 2.65 / automake 1.13 / libtool 1.5.24、pkg-config 的 autoconf 宏pkg.m4、lex 与 yacc官方主要基于 flex 和 bison 开发、libssl-dev。从源码安装步骤第 1 步生成 configure 脚本。若你是首次从源码仓库构建而不是下载的 tarball需要先生成 configure 脚本。在仓库顶层目录执行./bootstrap.sh从 bootstrap.sh 源码可以看到该脚本会依次执行make distclean、调用libtoolizemacOS 上为glibtoolize、aclocal -I ./aclocal、autoheader等步骤并且会校验 automake 版本不低于 1.13否则直接报错退出。第 2 步配置configure。在仓库顶层目录执行export CXXFLAGS-D PTHREAD_MUTEX_RECURSIVE_NPPTHREAD_MUTEX_RECURSIVE ./configure设置CXXFLAGS环境变量是为了绕开PTHREAD_MUTEX_RECURSIVE_NP未声明的编译错误用更新的、可移植的PTHREAD_MUTEX_RECURSIVE宏替换旧宏。该方案在 cygwin 20100320、Thrift r760184、最新 pthread 组合上验证通过。可选只构建编译器。若从 Thrift 根目录执行make遇到报错见下文“可能的问题”可以先切换到编译器目录再构建cd compiler/cpp第 3 步编译与安装。在根目录执行make会同时构建编译器与运行时库只构建编译器则在上一步进入的compiler/cpp目录执行make make install需要说明的是make目标的构成可参考 compiler/cpp/Makefile.am编译器二进制thrift的源码覆盖了全部语言生成器C、Java、Python、Go、Rust、Kotlin、Dart、PHP、Ruby、Erlang 等默认以-Wall -Wextra -pedantic -Werror严格告警级别编译。构建并安装目标语言库部分语言包必须使用更适合该语言的构建工具手工安装典型如 Java、Ruby、PHP。请查看lib/language/目录下的 README 了解各语言库包的安装细节同上文方案二。Cygwin 安装的常见问题问题 1./configure语法错误部分用户运行./configure时会遇到如下报错./configure: line 21183: syntax error near unexpected token MONO, ./configure: line 21183: PKG_CHECK_MODULES(MONO, mono 1.2.6, have_monoyes, have_monono)原因PKG_CHECK_MODULES宏未定义即缺少 pkg-config 安装的pkg.m4宏文件。解决找到系统中的pkg.m4由 pkg-config 软件包安装复制到 Thrift 的aclocal目录。在 Thrift 顶层目录执行cp /usr/share/aclocal/pkg.m4 aclocal然后重新运行./bootstrap.sh和./configure。注意pkg.m4由 pkg-config 工具生成。若/usr/share/aclocal目录下没有pkg.m4说明系统可能未安装 pkg-config。问题 2安装 perl 运行时库出错有时安装 perl 库的过程中会因chmod操作报错。解决办法两种如果不需要 perl可用--without-perl参数配置跳过 perl 库的安装./configure --without-perl如果需要 perl 且愿意手工安装则在构建完成后替换thrift/lib/perl/Makefile的内容原文档中此处的具体替换内容标记为 TODO未给出最终方案实际可从 lib/perl/Makefile.PL 出发使用 perl 标准的perl Makefile.PL make make install流程手工安装。补充configure.ac中这类开关是成体系的仓库还提供了--enable-libs是否构建 Thrift 各语言库默认yes等选项可在./configure --help中查看完整列表见 configure.ac。问题 3链接已安装的 C 运行时库失败有时用 g 链接已安装的libthrift.a会失败报出 Thrift 类的 vtable 与异常相关的链接器错误。解决思路直接从 Thrift 构建产物中链接对应的目标文件.o而不是链接静态库。可在 Makefile 中加入如下片段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进行链接。原文档在此处标注 “TODO - diagnose the issue further”即该问题根因当时尚未完全定位此方案属于已验证有效的 workaround。问题 4cygwin 1.7.5-1 g-4.3.4 下fork()后throw段错误如果 Thrift C 程序在fork()之后执行throw出现段错误可改用 g-3 编译规避。该问题在 Cygwin 1.7.5-1 之后的版本或 g 4.5.0 中已修复。方案四通过 MinGW 从源码构建要在不依赖cygwin.dll的前提下编译 Thrift 代码生成器与运行时库需要安装 MinGWwww.mingw.org。环境要求MinGWApache Thrift 通用构建要求见 doc/install/README.md将以下目录加入 Windows 的 PATH 环境变量C:\MINGW\BIN从源码安装步骤第 1 步修改编译器 Makefile。打开compiler/cpp/Makefile.am在thrift_CXXFLAGS中追加-DMINGW -mno-cygwin -lfl这对应原文档中的手工操作若使用 CMake 路线则无需此步。第 2 步生成 configure 脚本./bootstrap.sh第 3 步确保 java 在 PATH 中若无按需调整路径后执行export PATH$PATH:/cygdrive/c/program files/java/jre1.8.0_191/bin第 4 步配置使用 CXXFLAGS 绕开旧 pthreads 宏定义问题该宏替换方案在 MinGW 上未测试在 Cygwin 上已验证export CXXFLAGS-D PTHREAD_MUTEX_RECURSIVE_NPPTHREAD_MUTEX_RECURSIVE ./configure可选只构建编译器cd compiler/cpp第 5 步编译mingw32-make.exeMinGW 安装的常见问题同样请先参考上文 Cygwin 的常见问题特别是关于PTHREAD_MUTEX_RECURSIVE_NP的讨论。问题 1yywrap is not found解决确保 Makefile 的 cxxflags 中已加入-lfl同时可尝试在链接参数中追加-Lc:/cygwin/libs。问题 2boost is not found解决把 include 目录改为从 C 盘根目录出发的 Windows 路径形式。编辑compiler/cpp/Makefile找到BOOST_CPPFLAGS声明将该行改为示例按实际安装路径调整BOOST_CPPFLAGS -Ic:/cygwin/usr/include/boost-1_53_0问题 3realpath is not found解决在 Makefile 的CXXDEFS变量中追加-DMINGW -mno-cygwin构建完成后的验证与延伸阅读验证编译器可用构建或下载得到thrift可执行文件后可用仓库自带测试 IDL 快速验证例如thrift --gen cpp test/ThriftTest.thrift仓库中可用于验证的测试文件包括 test/ThriftTest.thrift、tutorial/tutorial.thrift 等。编译器自带--help可查看全部命令行选项。编译器的单元测试基于 Boost.Test 的测试位于 compiler/cpp/test基于 Catch 测试库的跨语言生成器测试位于 compiler/cpp/tests参见 compiler/cpp/README.md。延伸阅读环境要求汇总完整依赖与各语言工具链版本要求见 doc/install/README.md编译器各平台构建细节CMake / Git Bash / Visual Studio / MinGW 交叉编译见 compiler/cpp/README.md语言库构建进入lib/language/目录阅读对应README.md如 lib/cpp/README.md、lib/java/README.md。结语总结而言Windows 上搭建 Thrift 环境的决策树非常清晰追求省事就用预编译 EXE追求原生体验就用 Visual Studio 工程推荐只有在确实需要类 Unix 构建流程时才选择 Cygwin/MinGW。无论走哪条路核心要领都是先把编译器装好再按目标语言各自的工具链去构建运行时库。本文覆盖的三条路径及全部已知问题解法均可在本仓库 doc/install/windows.md 原文与上述源码文件中逐一核对遇到报错时对照“常见问题”小节即可快速定位。【免费下载链接】thriftApache Thrift项目地址: https://gitcode.com/GitHub_Trending/thr/thrift创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表