Ubuntu14.04下源码编译安装ice3.5.1
2016-05-16 16:52
537 查看
从这里下载ice源文件
安装第三方依赖
1 安装berkely DB
2 安装mcpp
3 安装bzip下载
4 安装expat下载
5 安装openssl下载
安装ice
ice错误提示
测试用例
ubuntu1404下是可以通过下面这条指令安装ice3.5的,如果没有,那就源码装吧
解决:应该是mcpp没有安装成功,是不是忘记上面步骤中的patch了,重新安装。
错误提示:/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_ARM_THM_MOVW_ABS_NC against `BZ2_crc32Table’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libbz2.a: error adding symbols: Bad value
解决:bzip没有装好,一般是64 位 电脑才会出现。上面已经提示了recompile with -fPIC。所以回到bzip目录,修改Makefile文件,CC = gcc —> CC = gcc- fPIC,再次make && make install
错误提示:/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../../lib/libssl.a(s23_meth.o): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol’ can not be used when making a shared object; recompile with -fPIC
解决:这个错误和问题2是一样的,因此修改Makefile文件,CC = gcc —> CC = gcc- fPIC,再次make && make install
错误提示:openssl安装时候的问题
解决:先下了一个版本1.1.0的,安装出现问题,回到版本0.9.8。
建立ice文件demo.ice
运行下面的命令,会在print目录下生成demo.h和demo.cpp。
编写ice服务端server.cpp
编写ice客户端client.cpp
编译并运行客户端和服务端,如果hello world打印出来,那么就是安装成功了。
安装第三方依赖
1 安装berkely DB
2 安装mcpp
3 安装bzip下载
4 安装expat下载
5 安装openssl下载
安装ice
ice错误提示
测试用例
ubuntu1404下是可以通过下面这条指令安装ice3.5的,如果没有,那就源码装吧
sudo apt-get install libzeroc-ice35-dev
1. 从这里下载ice源文件
主要包括两部分:ice3.5.1.tar.gz和第三方依赖包ThirdParty-Sources-3.5.1.tar.gz
2. 安装第三方依赖
第三方依赖包中只含有berkely DB和mcpp两个依赖包,还缺少bzip、expat、openssl。
2.1) 安装berkely DB
$tar xvf ThirdParty-Sources-3.5.1.tar.gz $cd ThirdParty-Sources-3.5.1 $tar zxvf db-5.3.21.NC.tar.gz $cd db-5.3.21.NC/ $patch -p0 < ../db/patch.db.5.3.21 $cd build_unix/ $../dist/configure --prefix=/usr --enable-cxx $make && make install
2.2) 安装mcpp
$tar xvf mcpp-2.7.2.tar.gz $cd mcpp-2.7.2 $patch -p0 < ../mcpp/patch.mcpp.2.7.2 $./configure CFLAGS=-fPIC --enable-mcpplib --disable-shared $make && make install
2.3) 安装bzip[下载]
$tar zxvf bzip2-1.0.6.tar.gz $cd bzip2-1.0.6/ $make && make install
2.4) 安装expat[下载]
$tar jxvf expat-2.1.1.tar.bz2 $cd expat-2.1.1/ $./configure --prefix=/usr $make && sudo make install
2.5) 安装openssl[下载]
$unzip OpenSSL_0_9_8-stable.zip $cd openssl-OpenSSL_0_9_8-stable/ $./config --prefix=/usr --openssldir=/usr/openssl(openssldir默认为/usr/ssl/openssl,需要修改,否则默认安装路径会找不到。) $make $make test $sudo make install
3. 安装ice
$tar zxvf v3.5.1.tar.gz $cd ice-3.5.1/cpp/ (这里只是安装了ice的c++模块) $make && sudo make install
4. ice错误提示
错误提示:/usr/lib.ld:Error:cannot find -lmcpp解决:应该是mcpp没有安装成功,是不是忘记上面步骤中的patch了,重新安装。
错误提示:/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_ARM_THM_MOVW_ABS_NC against `BZ2_crc32Table’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libbz2.a: error adding symbols: Bad value
解决:bzip没有装好,一般是64 位 电脑才会出现。上面已经提示了recompile with -fPIC。所以回到bzip目录,修改Makefile文件,CC = gcc —> CC = gcc- fPIC,再次make && make install
错误提示:/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../../lib/libssl.a(s23_meth.o): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol’ can not be used when making a shared object; recompile with -fPIC
解决:这个错误和问题2是一样的,因此修改Makefile文件,CC = gcc —> CC = gcc- fPIC,再次make && make install
错误提示:openssl安装时候的问题
解决:先下了一个版本1.1.0的,安装出现问题,回到版本0.9.8。
5. 测试用例
建立一个print目录,在该目录下:建立ice文件demo.ice
module demo { interface printer { void printerstr(string msg); }; };
运行下面的命令,会在print目录下生成demo.h和demo.cpp。
$slice2cpp demo.ice $ls print/ demo.ice demo.h demo.cpp
编写ice服务端server.cpp
#include <Ice/Ice.h> #include <demo.h> using namespace demo; using namespace std; class PrinterI : public printer { public: virtual void printerstr(const string & s, const Ice::Current &); }; void PrinterI:: printerstr(const string & s, const Ice::Current &) { cout << s << endl; } int main(int argc, char* argv[]) { int status = 0; Ice::CommunicatorPtr ic; try { ic = Ice::initialize(argc, argv); Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints( "SimplePrinterAdapter", "default -p 10000"); Ice::ObjectPtr object = new PrinterI; adapter->add(object, ic->stringToIdentity("SimplePrinter")); adapter->activate(); ic->waitForShutdown(); } catch (const Ice::Exception & e) { cerr << e << endl; status = 1; } catch (const char * msg) { cerr << msg << endl; status = 1; } if (ic) ic->destroy(); return status; }
编写ice客户端client.cpp
#include <Ice/Ice.h> #include <demo.h> using namespace demo; using namespace std; int main(int argc, char * argv[]) { int status = 0; Ice::CommunicatorPtr ic; try { ic = Ice::initialize(argc, argv); Ice::ObjectPrx base = ic->stringToProxy( "SimplePrinter:default -p 10000"); printerPrx printer = printerPrx::checkedCast(base); if (!printer) throw "Invalid proxy"; printer->printerstr("Hello World!"); } catch (const Ice::Exception & ex) { cerr << ex << endl; status = 1; } catch (const char * msg) { cerr << msg << endl; status = 1; } if (ic) ic->destroy(); return status; }
编译并运行客户端和服务端,如果hello world打印出来,那么就是安装成功了。
$ g++ -I. -o server demo.cpp server.cpp -lIce -lIceUtil -lpthread $ g++ -I. -o client demo.cpp client.cpp -lIce -lIceUtil -lpthread $ ./server $./client Hello World!
相关文章推荐
- document.execCommand 实现简单的富文本编辑器
- 寻找发帖”水王“
- android 外部html页面启动本地app及app启动问题
- 多线程
- WEB ui快速构建
- Linux grep基本用法与正则表达式
- C/C++ 数据结构---线性顺序存储数据:查询快,增删慢
- 新建内存优化表
- BoneCP学习笔记
- 吸收马尔可夫链
- Android实用代码七段(四)
- js正则匹配html内容
- redhat6.5zabbix_agent的安装
- 前端最新知识点小记
- kmp模板
- 由二叉树的遍历序列恢复二叉树
- letcode 118
- stdint--ISO C99: 7.18 Integer typesC语言扩展类型
- Mac 搭建本地Apache服务器
- 前端一些网站