grpc vs2015编译
获取gRPC源码
github安装后,在指定文件夹中,执行git命令就可以获取gRPC的所有源码。
参考readme用CMAKE生成工程文件,编译即可。首先打开vs2015开发人员命令提示符窗口,切换到对应的protobuf目录
具体步骤:
1:cd protobuf
2: Git clone -b release-1.7.0 https://github.com/google/googlemock.git gmock
3:cd gmock
4:git clone -b release-1.7.0 https://github.com/google/googletest.git gtest
5:cd ..\cmake
6:mkdir build & cd build & mkdir install
7:mkdir debug & cd debug
8:cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install ../..
9:nmake && nmake install
10:生成完成,在install目录下面有对应的Lib文件。在cmake目录下面mkdir debug,然后把install/lib目录下的所有库文件拷贝的debug路径,并把后缀d去掉。例如protobuf生成的库名称为libprotocd.lib,应该改名成libprotoc.lib。其他的依次类推。后面编译grpc会用到这些库。
step2. 编译grpc,grpc_protoc_plugin:在vsprojects里有建好的工程文件,下载nuget.exe,用于依赖包的网络下载。主要是依赖于openssl和zlib库。在编译grpc时,出现编译boringssl,出现很多错误,可以把工程移除
具体步骤:
1:cd vsprojects
2:nuget restore grpc.sln
3:msbuild grpc.sln /p:Configuration=Debug
grpc库生成成功。
4:编译grpc_cpp_plugin,执行命令:msbuild grpc_protoc_plugins.sln /p:Configuration=Debug
grpc_cpp_plugin.exe插件编译成功
用vs2015编译基本不会遇到什么问题,除了:grpc_cpp_plugin依赖libprotoc.lib,而protobuf生成的库名称为libprotocd.lib,这块需要手动改一下
step3. zlib 参考readme
step4编译helloworld
1: cd grpc/example/protos
2: 把proto.exe(protobuf工程生成,在install/bin目录下)、helloworld.proto拷贝到vsprojects\debug路径下面。此时在vsprojects\debug路径下面执行命令
- protoc.exe -I=. --grpc_out=. --plugin=protoc-gen-grpc=.\grpc_cpp_plugin.exe helloworld.proto
- protoc.exe -I=. --cpp_out=. helloworld.proto
生成了两套文件
- hellowworld.pb.h
- hellowworld.pb.cc
- hellowworld.grpc.pb.h
- hellowworld.grpc.pb.cc
其中前两个是protoc生成的,后两个是插件生成的
3:在vsprojects目录创建空的WIN32 C++工程grpc_helloworld.sln,在目录grpc_helloworld下面有两个文件夹。目录结构如下图
- $(SolutionDir)..\..\grpc\third_party\protobuf\src;$(SolutionDir)..\..\grpc\include;$(ProjectDir)..\protobuf;%(AdditionalIncludeDirectories)
预处理器设定
- _DEBUG;_WIN32_WINNT=0x600;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
代码生成-->运行库设置为 "多线程调试 (/MTd)"
- $(OutDir);$(SolutionDir)packages\grpc.dependencies.openssl.1.0.204.1\build\native\lib\v140\Win32\Debug\dynamic;$(SolutionDir)packages\grpc.dependencies.zlib.1.2.8.10\build\native\lib\v140\Win32\Debug\dynamic\cdecl;%(AdditionalLibraryDirectories)
附加依赖项设定
错误A:
Error2
error C1189:#error :"Please
compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)" d:\projects_framework\grpc\include\grpc\impl\codegen\port_platform.h 59 1 Server_Cpp
解决:在项目属性中的Preprocessor Definitions中添加_WIN32_WINNT=0x600
错误B:
Error 1 error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility 2132 1 Server_Cpp
解决:在项目属性中的Preprocessor Definitions中添加
_SCL_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS
错误C:
error LNK2038: mismatch detected for 'RuntimeLibrary': value
解决:只需要主程序和静态库都采用同一种Runtime Libray编译即可。
在项目属性C/C++中的Code Generation的Runtime Library选择Multi-threaded(/MT)
错误D:
Error 2 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MTd_StaticDebug' in greeter_server.obj D:\Projects_My\gRPC\gRPC_cpp\Server_Cpp\libprotobuf.lib(generated_message_util.obj) Server_Cpp
解决:原因是将debug的配置拷贝到release时,将Preprocessor Definitions的_DEBUG也考到release中了,去掉_DEBUG即可
错误E:
Error 113 error LNK2001: unresolved external symbol _SSL_state D:\Projects_My\gRPC\gRPC_cpp\Server_Cpp\grpc.lib(ssl_transport_security.obj) Server_Cpp
解决:添加openssl的lib(用v120,可能是vs的版本号),具体用v1xx可以根据自己的vs版本来对应
D:\XXXX\grpc\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\lib\v120\Win32\Release\static
库文件:
libeay32.lib
ssleay32.lib
错误F:
Error 2 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj) D:\Projects_My\gRPC\gRPC_cpp\Server_Cpp\msvcrt.lib(ti_inst.obj) Server_Cpp
解决:
Project Settings:
-> Configration Properties -> Linker -> Input -> Ignore Specific Library: LIBCMT.lib
在编译的时候,有可以还会遇到找不到Grpc内的某个符号,比如Channel、Complete_quque等, 以下以channel为例说明解决方法:
GRPC编译grpc++.lib时,生成的Channel.obj会被覆盖(原因没查出来,大概是因为grpc.lib编译时同样会生成channel.obj)
删掉obj目录中C:\path\to\grpc\vsprojects\IntDir\grpc++中的channel.obj,然后在工程里“生成”(不要重新生成)
grpc vs2015编译的更多相关文章
- vs2015编译使用GRPC
1.获取源码:位于github上 电脑装有git的直接克隆,未装git下载压缩包也可以 git clone https://github.com/grpc/grpc.git cd grpc git ...
- VS2015编译boost1.62
VS2015编译boost1.62 Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有 ...
- VS2015编译Qt5.7.0生成支持XP的静态库(很不错)
一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...
- Win7 下用 VS2015 编译最新 openssl(1.0.2j)包含32、64位debug和release版本的dll、lib(8个版本)
Win7 64位系统下通过VS2015编译好的最新的OpenSSL(1.0.2j)所有八个版本的链接库, 包含以下八个版本: 1.32位.debug版LIB: 2.32位.release版LIB: 3 ...
- 用VS2015编译sqlcipher
简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌 ...
- 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集
上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...
- VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时
之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...
- vs2015编译caffe
有些时候,需要在python3的环境下import caffe,需要用vs2015在python3的环境下,编译pycaffe. microsoft的windows版本的caffe,依赖的库Nuget ...
- 使用VS2015编译xlslib库
环境: win7_x64,VS2015 开始: 一.下载xlslib库 xlslib-package-2.5.0.zip 解压到一个指定目录,如E:\library\xlslib-package-2. ...
随机推荐
- Bootstrap中container与container-fluid的区别
/*0-768px以上宽度container为100%*/ .container { padding-right: 15px; padding-left: 15px; margin-right: au ...
- CSS选择器优先级计算
优先级从高到低排列,浏览器优先满足前面的规则 1,!important优先级最高 2,内联样式 3,作者>读者>浏览器 4,优先级权重加法 id选择器+100/个 类/伪类选择器+10/个 ...
- android 将手机号中间隐藏为星号(*)
){ StringBuilder sb =new StringBuilder(); ; i < pNumber.length(); i++) { char c = pNumber.charAt( ...
- 蘑菇街TeamTalk应用安卓源码
该源码是蘑菇街TeamTalk应用源码,该产品目标用户为中小型企业用户,支持单聊和群聊,提供文字.表情和图片的富文本实时聊天功能 详细说明:http://android.662p.com/thread ...
- I2C controller core之Bit controller(01)
FPGA proven, AISC proven, I2C controller core from OpenCores http://opencores.org/project,i2c Bit-co ...
- Redmine使用指南
公司之前使用JIRA登bug,但是客户在美国,他们习惯于用Redmine登bug,所以我们也开始在Redmine登bug,找来一个比较全面的Redmine使用指南,不懂时直接查看. http://bl ...
- 阿里巴巴矢量库IconFont__使用小录
使用阿里巴巴矢量库方法虽然不难,但本人记性不好,遂在次记录几笔 阿里巴巴矢量库地址:http://www.iconfont.cn/plus 阿里巴巴矢量库图标好处: 1:图标矢量化 2:自己总结:ic ...
- Android 性能测试初探(五)
书接上文 Android 性能测试初探之 GPU(四) 前文说了的一些性能测试项大家可能都听说,接下来我们聊聊大家不常关注的测试项- 功耗 . 功耗测试主要从以下几个方面入手进行测试 测试手机安装目标 ...
- Docker 导入镜像报错:open /var/lib/docker/tmp/docker-import-743441288/redis-3.0.7/json: no such file or directory
下载好了redis的tar包,然后导入redis镜像是报错open /var/lib/docker/tmp/docker-import-743441288/redis-3.0.7/json: no s ...
- 八进制、十进制、操作符(day04)
把二进制表示的数字从右向左每三个数位分成 一组,每组用一个0到7之间的数字替换. 这个替换结果叫做数字的八进制表示方式 (八进制) 可以直接在程序里用八进制方式表示数字, 这种数字必须以0做开头 可以 ...