-
Notifications
You must be signed in to change notification settings - Fork 393
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
srpc在windows上的编译流程参考 #221
Comments
0.Perpare:Download CMake binary form their official site,the version minimun requriement is 3.6 We assume that your repo current path is "E:/GitHubProjects" For several reasons, I recommend that you use vcpkg to install dependencies Open your Powershell/cmd/bash and clone vcpkg, then install dependencies git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
# install dependencies
# win32
.\vcpkg.exe install zlib:x86-windows protobuf:x86-windows openssl:x86-windows snappy:x86-windows lz4:x86-windows
# amd64
.\vcpkg.exe install zlib:x64-windows protobuf:x64-windows openssl:x64-windows snappy:x64-windows lz4:x64-windows
# The reason to specify arch and install dependencies for both arches is because vcpkg has a bug that causes cmake unable to find packages
# Attention! It is not recommended to integrate vcpkg globally, as this will cause vcpkg packages to contaminate your project. If you want to integrate VCPKG packages into a project, use Nuget's local repository instead
1.Compile :Clone the code from official repository: # return to the previous path
cd ..
git clone --recursive https://github.com/sogou/srpc.git
cd srpc
cd workflow
# check out to 'windows' branch
git checkout windows
#using Cmake to generate the VS solution, my current environment is cmake 3.23.0,visual studio 2022
# build the 32-bit version
cmake -B build32 -S . -DCMAKE_TOOLCHAIN_FILE=E:\GitHubProjects\vcpkg\scripts\buildsystems\vcpkg.cmake -G "Visual Studio 17" -A Win32
cmake --build build32 --config Debug
cmake --build build32 --config Release
# build the 64-bit version
cmake -B build64 -S . -DCMAKE_TOOLCHAIN_FILE=E:\GitHubProjects\vcpkg\scripts\buildsystems\vcpkg.cmake -G "Visual Studio 17" -A x64
cmake --build build64 --config Debug
cmake --build build64 --config Release
Then compile srpc: # return to the previous path
cd ..
# build the 32-bit version
cmake -B build32 -S . -DCMAKE_TOOLCHAIN_FILE=E:\GitHubProjects\vcpkg\scripts\buildsystems\vcpkg.cmake -G "Visual Studio 17" -A Win32
cmake --build build32 --config Debug
cmake --build build32 --config Release
# build the 64-bit version
cmake -B build64 -S . -DCMAKE_TOOLCHAIN_FILE=E:\GitHubProjects\vcpkg\scripts\buildsystems\vcpkg.cmake -G "Visual Studio 17" -A x64
cmake --build build64 --config Debug
cmake --build build64 --config Release
2.Compile Tutorials:# compile directly in the srpc directory
# build the 32-bit version
cmake -B buildt32 -S tutorial -DCMAKE_TOOLCHAIN_FILE=E:\GitHubProjects\vcpkg\scripts\buildsystems\vcpkg.cmake -G "Visual Studio 17" -A Win32
cmake --build buildt32 --config Debug
cmake --build buildt32 --config Release
# build the 64-bit version
cmake -B buildt64 -S tutorial -DCMAKE_TOOLCHAIN_FILE=E:\GitHubProjects\vcpkg\scripts\buildsystems\vcpkg.cmake -G "Visual Studio 17" -A x64
cmake --build buildt64 --config Debug
cmake --build buildt64 --config Release
At this point, the entire compilation process for srpc on Windows is complete, and you can try running examples |
此步骤编译出现错误(展示一部分错误和警告):
从错误提示来看,是MT 和 MD的问题。 |
在workflow项目里windows分支里查看了CMakeList.txt, 里面有几行代码:
if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)这句有问题吗,workflow项目不至于和srpc的tutorial有关系吧? |
😓应该是为了快速解决问题给加的,肯定不好。 |
正常的,我编译了workflow的tutorial,编译通过,运行也正常,只有编译srpc的tutorial编译出现错误。 |
你好~~~ srpc编译tutorial会报什么错呢? |
这种错误:
是MT的问题,我把srpc和tutorial的CMakeList中关于MT注释,就没问题了 |
@flyleier 你好,你说的是注释这行么?直接注释掉就好了?
|
是的,就是这句。 |
@flyleier 问了下小伙伴,这是cmake版本的问题,你可以尝试新点的cmake就不会编译错误了 |
不是这个问题,我昨天没看issue,不好意思。他这个显然就是tutorial与srpc或者workflow的运行库不一致导致的。 |
应该没有更好的改法了,如果要控制运行库的话 |
用的就是最新的cmake,运行库是要保持一致,我全部改成MD了,没啥问题,编译通过了。 |
能不能也帮我们提交一个PR? |
默认就是MD,产生上述错误的情况是因为其中一个库的运行库和其他不一致,如果你全都改为MT也没有问题 |
是的,默认就是MD,因为workflow也是依赖MD的运行库,所以srpc我也改成了MD,如果要全改MT,那么也得改workflow了。 |
你这个改的不对呀, 这么改不是把我加的特性完全抹掉了吗?我上个pr已经修复了这个问题了。 |
对的,我已经编译通过了。首先,我们的目标是一致的,让srpc和workflow的运行库一致,我改的是srpc,你提交的pr是workflow的。不能说,和你不一致就是不对的,其次,在这个issue下面你没说你已经提交pr了,大家都是想让这个项目变得更好,如果你说你提交pr了,我肯定不会再改了,下次说清楚点。 |
只讨论技术哈。大家都是我们的热心用户,不存在谁不让别人继续改的问题😂 |
我也拉我们的Windows开发,问一下怎么做合理一点。@dengjunplusplus |
@Barenboim |
好的好的,感谢哈。都怪我们Windows上支持力量不够,靠大家改进了。 |
应该是用的场景少,然后改法有点粗糙,我才那么说的。 |
我的意思是,在修改之前,先读一下原来的代码,不过我确实在提交的时候犯了低级错误。你遇到的这个问题,我也遇到过,我认为解决问题应该从整体出发,而不是头痛医头,脚痛医脚。,我之前的pr是针对两个项目的,运行库的设置在windows上是比较重要的。 |
@luciouskami 在 Windows 10 上使用
|
@luciouskami 另外说一下,我看了具体的链接过程,牵扯到 |
编译时遇到以上错误,因为预处理器把这句话中max()当成宏来处理。 srpc/src/module/rpc_filter_metrics.cc Line 314 in 6340b19
我临时做法:
希望开发者修正。 |
感谢^^我改一下~ |
Windows版本的编译太难了,简直是劝退的节奏 |
公司里都是linux环境。Windows没有专职的开发。不好意思。群里有不少Windows用户,可以问问。 |
按照这个说明文档可以编译成功,但是网络不稳定,vcpkg下载经常中断。自行从源码编译几个依赖库的时候到最后配置srpc的cmake总是失败。 |
另外编译srpc_generator的时候Windows下似乎缺少getopt.h/c,所以编译的时候会失败,需要添加一个getopt.h/c文件到工程中。 |
感谢,这个我今天加一下~ |
编译srpc时报这个错 |
@EvainGGbond 你好,谢谢提醒,这两个新加的模块忘了给cmake加上windows的编译定义了,刚提交了个Pull Request修复:#338 你也可以先从我的fork上:https://github.com/holmes1412/srpc/tree/master,拉取新代码看看这次修改是否是否还有问题,感谢~ 这个Pull Request我们也会很快merge。 |
嗯呐,我自己在源码里面加上重新编译过了 |
好的~因为Windows我没有编译环境,所以容易有所遗漏~如果还发现其他问题也非常欢迎提PR修复~ |
0.编译前的准备:
从CMake的官网下载CMake的二进制文件并安装,建议CMake版本 >= 3.6
我们假设您当前的路径为:E:/GitHubProjects
由于一些原因,我建议您使用vcpkg来安装依赖项
打开Powershell/cmd/bash,拉取vcpkg,并安装依赖项:
1.编译源代码:
从官方仓库拉取代码,并编译:
接下来编译srpc:
2.编译例子:
至此,windows上srpc的整个编译流程就结束了,可以尝试运行一下例子测试一下效果
The text was updated successfully, but these errors were encountered: