thrift源码编译(thrift源码分析)
本文目录一览:
如何让thrift0.9.2 在macos上面编译通过
首先,我们来参考官网的安装步骤:
OS X Setup
The following command install all the required tools and libraries to build and install the Apache Thrift compiler on a OS X based system.
Install Boost
Download the boost library from boost.org untar compile with
./bootstrap.sh
sudo ./b2 threading=multi address-model=64 variant=release stage install
Install libevent
Download libevent, untar and compile with
./configure --prefix=/usr/local
make
sudo make install
Building Apache Thrift
Download the latest version of Apache Thrift, untar and compile with
./configure --prefix=/usr/local/ --with-boost=/usr/local --with-libevent=/usr/local
Additional reading
For more information on the requirements see: Apache Thrift Requirements
For more information on building and installing Thrift see: Building from source
This snippet was generated by Apache Thrift's source tree docs: doc/install/os_x.md
----------------------------------------------------------------------------------
然后,你可能会遇到下面的问题:
make[4]: *** [src/thrift/transport/TSSLSocket.lo] Error 1
openssl版本过旧导致, 在mac下面可以升级一下:
brew update
brew install openssl
brew link --force openssl
openssl version -a
processor/ProcessorTest.cpp:26:10: fatal error: 'tr1/functional' file not found
The problem here is that libc++ has been written after c++11 was "released".
You could try this:
#if __cplusplus = 201103L
#include functional
#else
#include tr1/functional
#endif
and compile with CXXFLAGS="-std=c++11".
[thrift dir]/lib/cpp/test/processor/ProcessorTest.cpp
---------------------------------------------------------------------
library not found for -l:libboost_unit_test_framework.a thrift
为啥不能找到lib目录呢?
fuck,修改:
vim [thrift dir]/lib/cpp/test/Makefile.am
暂时用绝对路径:/usr/local/lib/ibboost_unit_test_framework.a 替换
终于通过了,跨平台为啥做的这么烂~
windows使用thrift c++ 需要编译lib吗
FFmpeg在Windows系统下的编译过程,分四步:如下:1.配置编译环境2.下载FFMPEG的代码3.编译,获取FFMPEG库(头文件,lib,和DLL)4.在VC下配置,测试1.配置编译环境1)安装MSys下载文件:bash-3.1-MSYS-1.0.11-snapshot.tar.bz2msysCORE-1.0.11-20080826.tar.gz解压msysCORE-1.0.11-20080826.tar.gz,比如解压到X:\msys(以下内容都使用该路径描述,X为你安装的盘符)。解压bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,产生一个名为bash-3.1的目录,在该目录下有一个子目录名为bin,其他的目录不需要关心。复制bin目录中的所有文件到D:\msys\bin,提示是否要覆盖sh.exe的时候,选择是。到“D:\msys\postinstall”目录下执行pi.bat,在出现的提示中输入n回车后(这个不搞错了),按任意键退出即可。2)安装MinGW下载文件:binutils-2.20-1-mingw32-bin.tar.gz(binutils-2.19.1-mingw32-bin.tar.gz)gcc-core-3.4.5-20060117-3.tar.gzgcc-g++-3.4.5-20060117-3.tar.gzw32api-3.13-mingw32-dev.tar.gz mingwrt-3.16-mingw32-dev.tar.gz(mingwrt-3.15.2-mingw32-dev.tar.gz)mingwrt-3.16-mingw32-dll.tar.gz(mingwrt-3.15.2-mingw32-dll.tar.gz)把它们全部解压到X:\msys\mingw。3)修改“msys.bat”用文本编辑器打开D:\msys\msys.bat,由于打算用MSVC++编译程序,所以需要有.lib文件才能链接到FFmpeg的库,这些.lib文件可以使用微软的工具链中lib命令产生。为此,机器上必须已经安装了微软的VisualStudio或是VisualC++。把下面一行加到msys.bat的最前面,把路径替换成机器上vcvars32.bat实际存在的路径,比如我的在“D:\programfiles\MicrosoftVisualStudio8\VC\bin”,于是就添加:call"D:\programfiles\MicrosoftVisualStudio8\VC\bin"4)系统整合复制D:\msys\etc\fstab.sample为X:\msys\etc\fstab,用文本编辑器打开D:\msys\etc\fstab编辑。(需要使用一个支持Unix换行风格的编辑器,比如Notepad++),把下面这行:D:/mingw/mingw改为:D:/msys/mingw/mingw注意:改的这个目录为mingw你所安装的目录,所以按本文来讲是这个目录。如果你安装不目录不同,就要改成你所安装的目录。完成以上步骤,MSys+MinGW系统就配置完成了。2.下载FFMPEG的代码下载代码的法由两个,一个就是用svn下载下来。我觉得哪怕你知道svn是啥,也不用这个方法,因为太慢了。一个文件一个文件下,最关键SVN对应的地址是国外,都不知道什么才能全部下完。另外一个直接下一个代码的压缩包。a)SVN下载地址为svn://svn.ffmpeg.org/ffmpeg/trunkb)直接压缩包。首先进入这个是ffmpeg的官方主页。在选项FFmpegSVN下,点击fullcheckout或者baresources。这连个链接第一个可以通过SVN更新代码,所以文件要大点,后面那个是纯代码。或许可以直接点击该文件的这个两个链接的一个直接得到。(我用的是baresources的程序)3.编译,获取FFMPEG库(头文件,lib,和DLL)首先通过MSys安装目录下的msys.bat启动MSys,这时会出现一个命令行窗口,它是一个运行着bash的rxvt程序,如下图:这是一个类似Linux的shell并且在Windows上运行,就像是在使用一个真正的Linuxshell。不过使用这个shell时需要注意:→目录名使用正斜杠来分割,而不是Windows所使用的反斜杠(比如说要写成"D:/ffmpeg"而不是"D:\ffmpeg")。→盘符(例如"C:\")可以从根目录处访问(像这样"/C/")。→文件名或目录名中如果带有空格,必须用双引号括起(例如这样"/C/ProgramFiles",带有双引号)。下面切换到存放FFmpeg源代码的目录(假如你的代码解压之后的路径是D:\ffmpeg),方法是输入:"cd/D/ffmpeg"。接下来要配置FFmpeg,选择编译时包含的库,这里先输入:./configure--enable-shared--disable-static--enable-memalign-hack--enable-memalign-hack选项是FFmpeg在Windows上编译成功所必须指定的,待配置完成后,将回到命令提示符,看到下图所示的画面:如果没有错误的话,就可以"make"具有基本功能的FFmpeg了,在提示符后输入:make。编译的过程将持续很长时间。如果一切正常,结束后将返回提示符,并有如下的最后编译结束的输出画面:在提示符后输入:makeinstall。执行完后会生成几个文件下在MSys目录的local文件夹下。4.在VC下配置(这个指如何在VC中调用ffmpeg库),测试VC环境配置:(假如目录为上图所示)方法当然就像其他额外库一样,一种是设置VC全局的Include路径为你E:\msys\local\include,设置VC全局lib路径为E:\msys\local\bin,增加操作系统的一个PathE:\msys\local\bin。另一种就是设置某个工程的lib和Include的路径。增加一个指向上面对应的地址。这个我就不是说的详细,想必玩VC的都知道。首先建一个VC的控制台工程,然后把E:\audio_video\ffmpeg\ffmpeg-0.5\libavcodec\apiexample.c(ffmpeg的存放目录)拷贝到你建的那个工程。然后改名apiexample.cpp。编译。你会发现缺头文件。这个时候你需要将E:\msys\mingw\include(mingw安装目录下的include)的inttypes.h,stdint.h,_mingw.h三个文件拷到D:\msys\include(你ffmpeg库的目录下的include)。编译还是有很多错。1.需要在inttypes.h中#define__restrict____restrict2.如果是longlong错误就改成__int64,(我没有遇到这个错误)3.c-time_base.den=(AVRational){1,25};改成c-time_base.num=1;c-time_base.den=25;//4.最上面的头文件定义如下:#include//注意这个别忘了,不然会出现math模板的一个错误#include#include#includeextern"C"{#ifdefHAVE_AV_CONFIG_H#undefHAVE_AV_CONFIG_H#endif#include#include#pragmacomment(lib,"avcodec.lib")#pragmacomment(lib,"avutil.lib")}4.1.我的理解是在api-example.cpp头文件中加入第4条的内容,即#include#include#include#ifdefHAVE_AV_CONFIG_H#undefHAVE_AV_CONFIG_H#endif#include"libavformat/avformat.h"//andrew#include"libavcodec/avcodec.h"#include"libavutil/mathematics.h"其中我加了#include"libavformat/avformat.h",如果不加就会报许多错误,意思是有学多变量没有定义。我测试了加或者不加头#include,对编译结果没有影响。5.api-example.cpp中似乎不支持强制类型转换,如samples=malloc(frame_size*2*c-channels);其实是将(void*)型转换成(short*),于是我在malloc的前面增加了(short*)此问题得以解决。即samples=(short*)malloc(frame_size*2*c-channels);6.按照网上高手的指示我在vs2005的工具-选项-VC++目录中,包含文件一栏,加入我的include文件夹,即D:\msys\local\include以上,你就可以在VC++中编译ffmpeg了。但是,配置MSYS太困难,咱给你一个下载地址,是已经配置好的MSYS哦~
thrift 编译缺少#include怎么办
一个已建立的连接被你的主机上的软件终止,可能是因为一次数据传输超时或是协议错误。 WSAECONNREFUSED (10061) Connection refused. 因为目标主机主动拒绝,连接不能建立。这通常是因为试图连接到一个远程主机上不活动的服务,如没有服务器应用...