linux的thrift编译指南详细版(64位 + 32位)

2023-11-16

linux的thrift编译指南详细版(64位 + 32位)


一、简介

thrift是使用IDL定义接口的支持多种开发语言的RPC框架,是apache项目之一。


二、编译

  • thrift依赖于boostlibeventopenssl
  • 64位系统编译32库需要安装gcc-multilibg++ - multilib:
sudo apt-get install gcc-multilib g++-multilib
  • 本教程使用Ubuntu 20.04和GCC 9.3.0。

1. OpenSSL

cd openssl-1.1.1k

# 编译64位库
./config --prefix=/usr/local/openssl
# 编译32位库
setarch i386 ./config -m32 --prefix=/usr/local/openssl

make
sudo make install

#测试
make test

2. libevent

cd libevent-2.1.12-stable

# 不使用OpenSSL --disable-openssl
# 使用OpenSSL CPPFLAGS="-I/usr/local/openssl/include" LDFLAGS="-L/usr/local/openssl/lib -lssl -lcrypto"

# 编译64位
./configure --disable-openssl --prefix=/usr/local/libevent 
# 编译32位
CC="gcc -m32" ./configure i386 --disable-openssl --prefix=/usr/local/libevent 

make
sudo make install

#测试
make check 

3. boost

cd boost_1_77_0

# 查看库
./bootstrap.sh --show-libraries
# 默认库
./bootstrap.sh --prefix=/usr/local/boost
# 定制库
./bootstrap.sh --without-libraries=container,context,exception,stacktrace,type_erasure,filesystem,locale,chrono,contract,fiber,graph,graph_parallel,iostreams,log,math,mpi,python,program_options,random,test,wave --without-icu --prefix=/usr/local/boost

# 编译64位
./b2 --with-system --with-serialization link=static threading=multi toolset=gcc address-model=64
# 编译32位
sed '12c      using gcc : : <cxxflags>-std=c++11 <compileflags>-m32 <linkflags>-m32;' -i project-config.jam
./b2  --with-system --with-serialization link=static threading=multi toolset=gcc architecture=x86 address-model=32

sudo ./b2 install

4. thrift

| 安装byacc、flex 和 bison

cd thrift-0.14.2

# 编译64位
./configure --disable-tests --disable-shared --disable-tutorial --with-cpp --without-python --without-java --without-lua --without-csharp --without-erlang --without-php --without-php_extension --without-haskell --without-perl --without-go --without-c_glib --enable-static --with-boost=/usr/local/boost --with-libevent=/usr/local/libevent --prefix=/usr/local/thrift CPPFLAGS="-I/usr/local/openssl/include" LDFLAGS="-L/usr/local/openssl/lib -lssl -lcrypto"
 
# 编译32位
./configure --disable-tests --disable-shared --disable-tutorial --with-cpp --without-python --without-java --without-lua --without-csharp --without-erlang --without-php --without-php_extension --without-haskell --without-perl --without-go --without-c_glib --enable-static --with-boost=/usr/local/boost --with-libevent=/usr/local/libevent --prefix=/usr/local/thrift CC="gcc -m32" CXX="g++ -m32" CPPFLAGS="-I/usr/local/openssl/include" LDFLAGS="-L/usr/local/openssl/lib -lssl -lcrypto"

make
sudo make install

三、检查

  1. 查看.a、.o、.so文件的信息
readelf -h libssl.a 
  1. openssl提示找不到动态库
# 视生成的位数选择: lib或lib64
sudo ln -s /usr/local/openssl/lib/libcrypto.so.1.1  /usr/lib/libcrypto.so.1.1
sudo ln -s /usr/local/openssl/lib/libssl.so.1.1  /usr/lib64/libssl.so.1.1
  1. thrift是可以不使用openssl的,但它的编译脚本有问题!需要手动改!不折腾!

四、总结

  • 现在的开发环境基本为64位,thrift默认编译为64位或交叉编译会相对简单,但是在64位系统编译为32位会很麻烦,因为thrift依赖于boost和libevent库,导致查阅资料和尝试编译耗时,效率不高。
  • 学习thrift的入门时间成本很高,相对来说,一次成功编译后续可以直接使用,还是能接受的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux的thrift编译指南详细版(64位 + 32位) 的相关文章

  • 为什么通过派生类对基类的引用与 :: - 运算符不明确?

    所以我想知道为什么以下钻石问题的代码片段无法编译 我知道这个问题通常是通过虚拟继承来解决的 我不是故意使用它的 该代码只是为了展示我的问题 即为什么编译器称此不明确 因此 我在 struct Base 中声明了两个成员变量 因为这两个子类
  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • JSON.Net 反序列化返回“null”

    我正在使用 JSON Net 反序列化 JSON 字符串 JSON 字符串是 string testJson Fruits Apple color red size round Orange Pro
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 无法为 wsdl 文件创建服务引用

    I have wsdl文件和xsd我本地机器上的文件 我想在项目中添加服务引用 我没有网络服务 我只有wsdl file 我收到以下错误 The document was understood but it could not be pro
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • Xamarin.Forms UWP 项目中标题栏和选项卡之间令人恼火的空白

    我几乎是新手Xamarin Forms我正在开发一个相当简单的跨平台应用程序 该应用程序在 Android 中显示得足够好 但在 UWP 中却出现了一个愚蠢的空白 该项目由一个 TabbedPage 组成 其中包含 4 个 Navigati
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima

随机推荐