如何在Windows平台下Build Avro C接口
2011-08-29 12:32
127 查看
最近有人问我,如何使用Cygwin,Mingw编译Avro的C接口。正好前一段时间一个项目要用到Avro的C接口,而且是在Windows平台。由于用Cygwin编译出来的dll,在windows上运行的时候需要cygwin.dll运行库的支持,而Mingw则是生成出来的二进制文件可以直接运行,只依赖于C的动态运行库(msvcrt.dll)。所以本文只介绍使用Mingw32编译出Windows平台下的Avro的C接口(Cygwin是类似的,只是前面的一些步骤不同而以)。
首先Mingw32的安装,去sourceforge的网站下载,网址:http://sourceforge.net/projects/mingw/;按照提示安装就可以了。
Apache Avro Build Instructions
REQUIREMENTS
The following packages must be installed before Avro can be built:
- Java: JDK 1.6
- PHP: php5, phpunit, php5-gmp
- Python: 2.5 or greater, python-setuptools for dist target
- C: gcc, autoconf, automake, libtool, asciidoc, source-highlight
- C++: cmake,g++, flex, bison, libboost-dev
- Ruby: ruby 1.86 or greater, ruby-dev, gem, rake, echoe, yajl-ruby
- Apache Ant 1.7
- Apache Forrest 0.8 (for documentation)
- md5sum, sha1sum, used by top-level dist target
以上是Build不同的Avro接口的要求,主要看下C接口的要求,一般Mingw安装好后,要求的包基本都安装好了,如果没安装相应的包,编译时会有提示。
安装好Mingw32和相应的包后,去apache的Avro的svn站点上把,Avro C的源代码下载下来,网址:http://svn.apache.org/viewvc/avro/trunk/lang/
将下载下来的Avro C的源代码,拷贝到home目录下,启动Mingw,切换到Avro C源代码的目录,执行编译命令 ./build.sh dist',这时会有编译出错,我记得好像是char型变量赋值给int 变量,修该代码(我改成强制转化就好了)重新执行编译命令 ./build.sh
dist';这时会出现链接错误,我们先不用管它,等它编译完,会有一堆的链接错误提示。没有提示编译错误,说明没有编译问题,就所有的C文件都编译没出错,链接问题是编译器将.C文件生成的.O中间文件链接成二进制的dll文件是出的错误,这个错误困扰了我两天,后来看它的编译脚本时才知道,原来是官网上提供的编译Make脚本本身就有问题,没有链接libjansson库,导致链接时会出很多jansson函数找不链接的错误,本人也不怎么会写Make脚本,索性就用来个笨办法,自己手动将.O中间文件链接成二进制的dll文件。方法如下:
首先将如下的.o文件拷贝到同一个文件夹下(方法在Build目录下搜索*.o文件就能找到这些文件),其中有两个dump.o文件,我将其中一个该为dump1.o,文件名如下:
dump1.o hashtable.o load.o strbuffer.o utf.o value.o allocation.o datum_json.o datum_write.o resolver.o consumer.o datum_read.o dump.o schema.o datafile.o datum_size.o encoding_binary.o schema_equal.o datum.o datum_skip.o errors.o
st.o datum_equal.o datum_validate.o io.o
将这些文件拷贝到了同一个文件夹下后,切换到该目录,执行如下命令:
gcc -shared dump1.o hashtable.o load.o strbuffer.o utf.o value.o allocation.o datum_json.o datum_write.o resolver.o consumer.o datum_read.o dump.o schema.o datafile.o datum_size.o encoding_binary.o schema_equal.o
datum.o datum_skip.o errors.o st.o datum_equal.o datum_validate.o io.o -o libavro.dll
这样就生成了libavro.dll,Avro C在Windows下的接口了。
通过libavro.dll,使用lib命令就可以生成导出文件libavro.lib文件了,然后拷贝出Avro中的头文件就可以使用Avro了!
给懒人提供一个我已经编译好了的Avro C接口库:
首先Mingw32的安装,去sourceforge的网站下载,网址:http://sourceforge.net/projects/mingw/;按照提示安装就可以了。
Apache Avro Build Instructions
REQUIREMENTS
The following packages must be installed before Avro can be built:
- Java: JDK 1.6
- PHP: php5, phpunit, php5-gmp
- Python: 2.5 or greater, python-setuptools for dist target
- C: gcc, autoconf, automake, libtool, asciidoc, source-highlight
- C++: cmake,g++, flex, bison, libboost-dev
- Ruby: ruby 1.86 or greater, ruby-dev, gem, rake, echoe, yajl-ruby
- Apache Ant 1.7
- Apache Forrest 0.8 (for documentation)
- md5sum, sha1sum, used by top-level dist target
以上是Build不同的Avro接口的要求,主要看下C接口的要求,一般Mingw安装好后,要求的包基本都安装好了,如果没安装相应的包,编译时会有提示。
安装好Mingw32和相应的包后,去apache的Avro的svn站点上把,Avro C的源代码下载下来,网址:http://svn.apache.org/viewvc/avro/trunk/lang/
将下载下来的Avro C的源代码,拷贝到home目录下,启动Mingw,切换到Avro C源代码的目录,执行编译命令 ./build.sh dist',这时会有编译出错,我记得好像是char型变量赋值给int 变量,修该代码(我改成强制转化就好了)重新执行编译命令 ./build.sh
dist';这时会出现链接错误,我们先不用管它,等它编译完,会有一堆的链接错误提示。没有提示编译错误,说明没有编译问题,就所有的C文件都编译没出错,链接问题是编译器将.C文件生成的.O中间文件链接成二进制的dll文件是出的错误,这个错误困扰了我两天,后来看它的编译脚本时才知道,原来是官网上提供的编译Make脚本本身就有问题,没有链接libjansson库,导致链接时会出很多jansson函数找不链接的错误,本人也不怎么会写Make脚本,索性就用来个笨办法,自己手动将.O中间文件链接成二进制的dll文件。方法如下:
首先将如下的.o文件拷贝到同一个文件夹下(方法在Build目录下搜索*.o文件就能找到这些文件),其中有两个dump.o文件,我将其中一个该为dump1.o,文件名如下:
dump1.o hashtable.o load.o strbuffer.o utf.o value.o allocation.o datum_json.o datum_write.o resolver.o consumer.o datum_read.o dump.o schema.o datafile.o datum_size.o encoding_binary.o schema_equal.o datum.o datum_skip.o errors.o
st.o datum_equal.o datum_validate.o io.o
将这些文件拷贝到了同一个文件夹下后,切换到该目录,执行如下命令:
gcc -shared dump1.o hashtable.o load.o strbuffer.o utf.o value.o allocation.o datum_json.o datum_write.o resolver.o consumer.o datum_read.o dump.o schema.o datafile.o datum_size.o encoding_binary.o schema_equal.o
datum.o datum_skip.o errors.o st.o datum_equal.o datum_validate.o io.o -o libavro.dll
这样就生成了libavro.dll,Avro C在Windows下的接口了。
通过libavro.dll,使用lib命令就可以生成导出文件libavro.lib文件了,然后拷贝出Avro中的头文件就可以使用Avro了!
给懒人提供一个我已经编译好了的Avro C接口库:
相关文章推荐
- windows 10 build 9926开始菜单如何实现可调整大小功能?
- 如何在Form++开源组态平台添加硬件采集接口
- 如何在windows平台添加新的OCFS磁盘
- linux、windows平台下如何监控mysql执行的sql语句
- Windows平台下如何使用Android NDK
- 如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口
- 如何在 Windows 平台上下載 Android 的源码[转]
- 如何在Windows 7平台搭建Android(eclipse) Cocos2d(c++)开发环境
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机中调用邮件发送接口
- 如何在Windows 7平台搭建Android Cocos2d-x3.2alpha0开发环境
- Windows平台下如何使用Android NDK
- 安装cmake(解决can't find build-essential,解决windows如何远程控制ubuntu)
- 如何在windows平台开发OpenGL程序使用OpenGL1.2或更高版本
- CaysnPrinter - Windows平台开发包打印示例程序及接口说明文档 - 20170710
- 如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口
- 基于Windows平台,C++ 如何调用exe程序
- 平台如如何实现类似windows的右键菜单
- 教你如何在Windows平台上创建以点(.)开头的文件名
- Windows平台下如何使用Android NDK
- 如何在 windows 平台安装 GNU 环境?