websocket++编译过程
websocket++ 是一个开源 websocket 库,使用websocket++ 能够开发基于websocket 服务。
前一段时间成功编译 websocket++ ,分享一下,编译websocket++ 过程如下:
1.安装Python , 本例安装 Python27
2.安装scons , 该程序负责构建跨平台编绎脚本。需要Python支持.
3.配置Python , scons , 环境变量:
C:\Python27 //Python27 环境变量
C:\Python27\Scripts //scons 环境变量
4.编译openssl //boost依赖项
5.编译boost //websocket 中使用boost库
6.编译websocket++
编绎过程为 openssl -> boost ->websocket , 最终生成32位运行环境程序
其中openssl 版本:openssl-1.0.2a , boost:boost_1_51_0 , websocket++ (0.3.0-alpha4)
openssl 编译需要perl支持,安装perl 后配置环境变量,本例为:C:\Perl64\bin
在openssl 根目录 INSTALL.W32 介绍了编绎过程:
1.打开vs2010 tool cmd x86环境 // vcvarsall x86
2.cd H:\openssl-1.0.2a\openssl-1.0.2a
3.perl Configure VC-WIN32 no-asm //没装汇编环境,因此添加 no-asm 否则报错
4.ms\do_ms
5.nmake -f ms\ntdll.mak
boost 编绎过程
1.解压boost_1_51_0 , 打开vs2010 tool cmd x86环境 , 切入到解压目录
2.运行bootstrap.bat , 生成 bjam
3.cmd 环境,输入 bjam install architecture=x86 address-model=32 --toolset=msvc-10.0 --without-python --build-type=complete --prefix="H:\boost_1_51_0\boost_1_51_0\bin\vc10_prefix_dll_arcx86_addr32" link=static runtime-link=shared threading=multi debug release
4.配置环境变量:
BOOST_INCLUDES = H:\boost_1_51_0\boost_1_51_0\bin\vc10_prefix_dll_arcx86_addr32\include\boost-1_51
BOOST_LIBS = H:\boost_1_51_0\boost_1_51_0\bin\vc10_prefix_dll_arcx86_addr32\lib
由于websocket++ 使用 boost 库, 本例程,将openssl 的 include lib 并入 boost 库路径中
1.拷贝 openssl-1.0.2a\openssl-1.0.2a\include\openssl 到 boost_1_51_0\boost_1_51_0\bin\vc10_prefix_dll_arcx86_addr32\include\boost-1_51
2.拷贝 openssl 编绎输入结果:out32dll 目录(libeay32.lib , ssleay32.lib)内容复制到 H:\boost_1_51_0\boost_1_51_0\bin\vc10_prefix_dll_arcx86_addr32\lib
websocket++ 例程编绎过程(0.3.0-alpha4)
1.解压websocket++ , 打开cmd , 切入到解压目录
2.修改SConstruct文件, 因为本人是win7 64位系统,默认编译结果是64位。本例目标编译x86环境,需要对 SConstruct 文件修改:
a.如将 :env['LINKFLAGS'] = '/INCREMENTAL:NO /MANIFEST /NOLOGO /OPT:REF /OPT:ICF /MACHINE:X64' 修改为:env['LINKFLAGS'] = '/INCREMENTAL:NO /MANIFEST /NOLOGO /OPT:REF /OPT:ICF /MACHINE:X86'
b.行首将 env = Environment(ENV = os.environ) 修改为: env = Environment(ENV = os.environ , TARGET_ARCH = 'x86')
a 设置生成目标程序运行环境为 x86机器。b TARGET_ARCH = 'x86' 设置编译环境为x86 , 如果编译64位,分别修改为:/MACHINE:X64 TARGET_ARCH = 'amd64'
3.修改examples/utility_client/utility_client.cpp , 其中引用了chrono 库,该库为cpp11标准库,vs2010不支持,去掉代码中包含chrono 引用部份。
4.在utility_client.cpp中添加对openssl部份引用:
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")
之前,我们已将openssl编译结果拷贝到boost lib 库中,因此,此处可直接引用。
关于拷贝openssl库到boost 目录的问题,也可不用拷贝,将openssl 库放入 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC 目录 lib , include 目录,效果一样。
至此,所有准备工作完成了,在cmd环境,切入0.3.0-alpha4解压目录, 运行 scons ,最终显示 scons: done building targets. 表明websocket++例程编译成功。
websocket++编译过程的更多相关文章
- Android工程的编译过程
现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...
- GCC编译过程
以下是C程序一般的编译过程: gcc的编译流程分为四个步骤,分别为:· 预处理(Pre-Processing) 对C语言进行预处理,生成*.i文件.· 编译(Compiling) 将上一步生成的*.i ...
- Linux系统GCC常用命令和GCC编译过程描述
前言: GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言.GCC 很快地扩展,变得可处理 C++.后来又 扩展能够支持更多编程语言,如Fortran. ...
- Hadoop源码编译过程
一. 为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...
- gcc编译过程简述
在linux系统上,从源文件到目标文件的转化是由编译器完成的.以hello.c程序的编译为例,如下: dfcao@linux: gcc -o hello hello.c 在这里,gcc编译器读取源文件 ...
- android 编译过程
引用:http://www.cnblogs.com/devinzhang/archive/2011/12/20/2294686.html http://blog.sina.com.cn/s/blog_ ...
- [转]UE4 Blueprint编译过程
Blueprint 编译概述 一.术语 Blueprint,像C++语言一下的,在游戏中使用前需要编译.当你在BP编辑器中,点击编译按钮时候,BP资源开始把属性和图例过程转换为一个类对象处理. 1 ...
- TextMate2 最新版下载及源码编译过程
TextMate2 已经开源,我刚编译成功,如果有需要的同学可以点击下面百度网盘的链接下载.我系统版本是:Mac OS X 10.8.4. TextMate version 2.0-alpha.946 ...
- C语言的编译过程、安装gcc编译器以及设置环境变量
以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ...
随机推荐
- html frames
http://blog.sina.com.cn/s/blog_67697189010116o0.html *********************************************** ...
- 转!Java关键字final、static使用总结
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可 ...
- 测试耗电量的工具(Android)
Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具. 支持SDK:Android2.2以及以上版本 Emmagee功能介绍 1.检测当前时间被测应用占用的CP ...
- 【转】 Linux 线程同步的三种方法
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点.linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量和信号量. 一.互斥锁(mutex) 通过锁机制实现线程间的 ...
- AOP 之 6.1 AOP基础(拾陆)
6.1.1 AOP是什么 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己的支付系统,也可能引入第三方支付平 ...
- IOC Container(服务容器)的工作机制
IOC Container 是laravel的一个核心内容,有了IOC Container在Laravel的强大表现,我们可以在Laravel中实现很大程度的代码维护性.(文档我是看的懵逼懵逼的(*^ ...
- python 练习 26
Python break语句,就像在C语言中,打破了最小封闭for或while循环. break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句. br ...
- 如何开发 Sublime Text 2 的插件
Sublime Text 2是一个高度可定制的文本编辑器,一直以来对希望有一个快速强大现代的编辑工具的的程序员保持着持续的吸引力.现在,我们将创建自己的一个Sublime plugin,实现用Nett ...
- VBA对象模型(1)
关于对象和集合的比喻 Excel的基本单元是Workbook对象:在快餐连锁店中,基本的单元是单个餐馆.使用Excel可以添加工作簿和关闭工作簿,所有打开的工作簿组成了Workbooks集合(Work ...
- Symmetric Tree [LeetCode]
Problem description: http://oj.leetcode.com/problems/symmetric-tree/ Basic idea: Both recursive and ...