Comments (37)
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
from srpc.
2.编译例子:
# 直接在srpc的目录下编译 # 编译32位版本 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 # 编译64位版本 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至此,windows上srpc的整个编译流程就结束了,可以尝试运行一下例子测试一下效果
此步骤编译出现错误(展示一部分错误和警告):
LINK : warning LNK4286: 符号“__stdio_common_vsprintf”(在“libucrtd.lib(output.obj)”中定义)已由“workflow.lib(WFDnsResolver.obj)”导入 [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(http_parser.obj) : error LNK2019: 无法解析的外部符号 __imp_realloc,函数 http_parser_append_message 中引用了该符号 [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(dns_parser.obj) : error LNK2001: 无法解析的外部符号 __imp_realloc [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(CommScheduler.obj) : error LNK2001: 无法解析的外部符号 __imp_realloc [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(URIParser.obj) : error LNK2001: 无法解析的外部符号 __imp_realloc [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(URIParser.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(DnsTaskImpl.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(http_parser.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(DnsUtil.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(WFDnsClient.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(dns_parser.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
D:\dev\srpc\tutorial\Debug\trpc_pb_server.exe : fatal error LNK1120: 4 个无法解析的外部命令 [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
从错误提示来看,是MT 和 MD的问题。
这个问题如何解决?
from srpc.
在workflow项目里windows分支里查看了CMakeList.txt, 里面有几行代码:
if (WIN32)
if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)
set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL
)
foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach ()
endif ()
endif ()
if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)这句有问题吗,workflow项目不至于和srpc的tutorial有关系吧?
from srpc.
在workflow项目里windows分支里查看了CMakeList.txt, 里面有几行代码:
if (WIN32) if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME) set(CompilerFlags CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL ) foreach(CompilerFlag ${CompilerFlags}) string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") endforeach () endif () endif ()
if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)这句有问题吗,workflow项目不至于和srpc的tutorial有关系吧?
😓应该是为了快速解决问题给加的,肯定不好。
你现在单独使用workflow的Windows版是正常的吗?
from srpc.
😓应该是为了快速解决问题给加的,肯定不好。 你现在单独使用workflow的Windows版是正常的吗?
正常的,我编译了workflow的tutorial,编译通过,运行也正常,只有编译srpc的tutorial编译出现错误。
from srpc.
😓应该是为了快速解决问题给加的,肯定不好。 你现在单独使用workflow的Windows版是正常的吗?
正常的,我编译了workflow的tutorial,编译通过,运行也正常,只有编译srpc的tutorial编译出现错误。
你好~~~ srpc编译tutorial会报什么错呢?
from srpc.
你好~~~ srpc编译tutorial会报什么错呢?
这种错误:
LINK : warning LNK4286: 符号“__stdio_common_vsprintf”(在“libucrtd.lib(output.obj)”中定义)已由“workflow.lib(WFDnsResolver.obj)”导入 [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(http_parser.obj) : error LNK2019: 无法解析的外部符号 __imp_realloc,函数 http_parser_append_message 中引用了该符号 [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(dns_parser.obj) : error LNK2001: 无法解析的外部符号 __imp_realloc [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(CommScheduler.obj) : error LNK2001: 无法解析的外部符号 __imp_realloc [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(URIParser.obj) : error LNK2001: 无法解析的外部符号 __imp_realloc [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(URIParser.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(DnsTaskImpl.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(http_parser.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(DnsUtil.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(WFDnsClient.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
workflow.lib(dns_parser.obj) : error LNK2001: 无法解析的外部符号 __imp__strdup [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
D:\dev\srpc\tutorial\Debug\trpc_pb_server.exe : fatal error LNK1120: 4 个无法解析的外部命令 [D:\dev\srpc\build_tutorial\trpc_pb_server.vcxproj]
是MT的问题,我把srpc和tutorial的CMakeList中关于MT注释,就没问题了
from srpc.
@flyleier 你好,你说的是注释这行么?直接注释掉就好了?
108 string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
from srpc.
@flyleier 你好,你说的是注释这行么?直接注释掉就好了?
108 string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
是的,就是这句。
from srpc.
@flyleier 问了下小伙伴,这是cmake版本的问题,你可以尝试新点的cmake就不会编译错误了
from srpc.
@flyleier 问了下小伙伴,这是cmake版本的问题,你可以尝试新点的cmake就不会编译错误了
不是这个问题,我昨天没看issue,不好意思。他这个显然就是tutorial与srpc或者workflow的运行库不一致导致的。
看他这个报错就是运行库里的,修改成一致的就行啦
from srpc.
在workflow项目里windows分支里查看了CMakeList.txt, 里面有几行代码:
if (WIN32) if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME) set(CompilerFlags CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL ) foreach(CompilerFlag ${CompilerFlags}) string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") endforeach () endif () endif ()
if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)这句有问题吗,workflow项目不至于和srpc的tutorial有关系吧?
😓应该是为了快速解决问题给加的,肯定不好。 你现在单独使用workflow的Windows版是正常的吗?
应该没有更好的改法了,如果要控制运行库的话
from srpc.
@flyleier 问了下小伙伴,这是cmake版本的问题,你可以尝试新点的cmake就不会编译错误了
不是这个问题,我昨天没看issue,不好意思。他这个显然就是tutorial与srpc或者workflow的运行库不一致导致的。 看他这个报错就是运行库里的,修改成一致的就行啦
用的就是最新的cmake,运行库是要保持一致,我全部改成MD了,没啥问题,编译通过了。
from srpc.
@flyleier 问了下小伙伴,这是cmake版本的问题,你可以尝试新点的cmake就不会编译错误了
不是这个问题,我昨天没看issue,不好意思。他这个显然就是tutorial与srpc或者workflow的运行库不一致导致的。 看他这个报错就是运行库里的,修改成一致的就行啦
用的就是最新的cmake,运行库是要保持一致,我全部改成MD了,没啥问题,编译通过了。
能不能也帮我们提交一个PR?
from srpc.
@flyleier 问了下小伙伴,这是cmake版本的问题,你可以尝试新点的cmake就不会编译错误了
不是这个问题,我昨天没看issue,不好意思。他这个显然就是tutorial与srpc或者workflow的运行库不一致导致的。 看他这个报错就是运行库里的,修改成一致的就行啦
用的就是最新的cmake,运行库是要保持一致,我全部改成MD了,没啥问题,编译通过了。
默认就是MD,产生上述错误的情况是因为其中一个库的运行库和其他不一致,如果你全都改为MT也没有问题
from srpc.
默认就是MD,产生上述错误的情况是因为其中一个库的运行库和其他不一致,如果你全都改为MT也没有问题
是的,默认就是MD,因为workflow也是依赖MD的运行库,所以srpc我也改成了MD,如果要全改MT,那么也得改workflow了。
@Barenboim pr提交了
from srpc.
默认就是MD,产生上述错误的情况是因为其中一个库的运行库和其他不一致,如果你全都改为MT也没有问题
是的,默认就是MD,因为workflow也是依赖MD的运行库,所以srpc我也改成了MD,如果要全改MT,那么也得改workflow了。 @Barenboim pr提交了
你这个改的不对呀, 这么改不是把我加的特性完全抹掉了吗?我上个pr已经修复了这个问题了。
from srpc.
你这个改的不对呀, 这么改不是把我加的特性完全抹掉了吗?我上个pr已经修复了这个问题了。
对的,我已经编译通过了。首先,我们的目标是一致的,让srpc和workflow的运行库一致,我改的是srpc,你提交的pr是workflow的。不能说,和你不一致就是不对的,其次,在这个issue下面你没说你已经提交pr了,大家都是想让这个项目变得更好,如果你说你提交pr了,我肯定不会再改了,下次说清楚点。
from srpc.
只讨论技术哈。大家都是我们的热心用户,不存在谁不让别人继续改的问题😂
我们暂时回滚了上一个修改,不是说改的不对哈,只有再讨论一下有没有什么问题。
from srpc.
我也拉我们的Windows开发,问一下怎么做合理一点。@dengjunplusplus
from srpc.
只讨论技术哈。大家都是我们的热心用户,不存在谁不让别人继续改的问题😂 我们暂时回滚了上一个修改,不是说改的不对哈,只有再讨论一下有没有什么问题。
@Barenboim
是的,我就是表述下,我提交pr只是想让项目变得更好。
这是误会,遇到编译错误的时候,就怀疑workflow的CMakeList中的if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)这句有问题,感觉是crtl+v的时候没有更改,我贴出来,你说是快速解决问题加的,所以我只能改srpc了,现在看了下workflow的提交历史,现在这句做了修改,问题能解决就好。
from srpc.
只讨论技术哈。大家都是我们的热心用户,不存在谁不让别人继续改的问题😂 我们暂时回滚了上一个修改,不是说改的不对哈,只有再讨论一下有没有什么问题。
@Barenboim 是的,我就是表述下,我提交pr只是想让项目变得更好。 这是误会,遇到编译错误的时候,就怀疑workflow的CMakeList中的if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)这句有问题,感觉是crtl+v的时候没有更改,我贴出来,你说是快速解决问题加的,所以我只能改srpc了,现在看了下workflow的提交历史,现在这句做了修改,问题能解决就好。
好的好的,感谢哈。都怪我们Windows上支持力量不够,靠大家改进了。
from srpc.
只讨论技术哈。大家都是我们的热心用户,不存在谁不让别人继续改的问题😂 我们暂时回滚了上一个修改,不是说改的不对哈,只有再讨论一下有没有什么问题。
@Barenboim 是的,我就是表述下,我提交pr只是想让项目变得更好。 这是误会,遇到编译错误的时候,就怀疑workflow的CMakeList中的if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)这句有问题,感觉是crtl+v的时候没有更改,我贴出来,你说是快速解决问题加的,所以我只能改srpc了,现在看了下workflow的提交历史,现在这句做了修改,问题能解决就好。
好的好的,感谢哈。都怪我们Windows上支持力量不够,靠大家改进了。
应该是用的场景少,然后改法有点粗糙,我才那么说的。
from srpc.
只讨论技术哈。大家都是我们的热心用户,不存在谁不让别人继续改的问题😂 我们暂时回滚了上一个修改,不是说改的不对哈,只有再讨论一下有没有什么问题。
是的,我就是表述下,我提交pr只是想让项目变得更好。
这是误会,遇到编译错误的时候,就怀疑workflow的CMakeList中的if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)这句有问题,感觉是crtl+v的时候没有更改,我贴出来,你说是快速解决问题加的,所以我只能改srpc了,现在看了下workflow的提交历史,现在这句做了修改,问题能解决就好。
我的意思是,在修改之前,先读一下原来的代码,不过我确实在提交的时候犯了低级错误。你遇到的这个问题,我也遇到过,我认为解决问题应该从整体出发,而不是头痛医头,脚痛医脚。,我之前的pr是针对两个项目的,运行库的设置在windows上是比较重要的。
from srpc.
@luciouskami 在 Windows 10 上使用 vcpkg
编译 srpc
存在以下几点问题。
- 在
vcpkg
编译srpc
成功的情况下,程序无法 link。原因是 LINK : fatal error LNK1104: cannot open file 'srpc.lib'。以下是编译日志:
====================[ Clean | Debug-Visual Studio x64 ]=========================
D:\JetBrainSoftware\apps\CLion\ch-0\222.4167.35\bin\cmake\win\bin\cmake.exe --build F:\GEMSDK\gemsdk\cmake-build-debug-visual-studio-x64 --target clean -j 9
[1/1] Cleaning all built files...
Cleaning... 2 files.
Clean finished
====================[ Build | all | Debug-Visual Studio x64 ]===================
D:\JetBrainSoftware\apps\CLion\ch-0\222.4167.35\bin\cmake\win\bin\cmake.exe --build F:\GEMSDK\gemsdk\cmake-build-debug-visual-studio-x64 --target all -j 9
[1/3] Building CXX object CMakeFiles\GEMSDK.dir\source\hsmspackage.cpp.obj
[2/3] Building CXX object CMakeFiles\GEMSDK.dir\source\main.cpp.obj
f:\gemsdk\gemsdk\cmake-build-debug-visual-studio-x64\vcpkg_installed\x64-windows\include\workflow\RedisMessage.h(326): warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)
f:\gemsdk\gemsdk\cmake-build-debug-visual-studio-x64\vcpkg_installed\x64-windows\include\workflow\HttpMessage.h(60): warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)
f:\gemsdk\gemsdk\cmake-build-debug-visual-studio-x64\vcpkg_installed\x64-windows\include\workflow\HttpMessage.h(65): warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)
f:\gemsdk\gemsdk\cmake-build-debug-visual-studio-x64\vcpkg_installed\x64-windows\include\workflow\HttpMessage.h(98): warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)
f:\gemsdk\gemsdk\cmake-build-debug-visual-studio-x64\vcpkg_installed\x64-windows\include\workflow\HttpMessage.h(103): warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)
f:\gemsdk\gemsdk\cmake-build-debug-visual-studio-x64\vcpkg_installed\x64-windows\include\workflow\HttpMessage.h(108): warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)
f:\gemsdk\gemsdk\cmake-build-debug-visual-studio-x64\vcpkg_installed\x64-windows\include\workflow\HttpMessage.h(113): warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)
f:\gemsdk\gemsdk\cmake-build-debug-visual-studio-x64\vcpkg_installed\x64-windows\include\workflow\DnsMessage.h(153): warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup. See online help for details.
C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\string.h(532): note: see declaration of 'strdup'
f:\gemsdk\gemsdk\cmake-build-debug-visual-studio-x64\vcpkg_installed\x64-windows\include\workflow\DnsMessage.h(159): warning C4800: 'char': forcing value to bool 'true' or 'false' (performance warning)
[3/3] Linking CXX executable GEMSDK.exe
FAILED: GEMSDK.exe
cmd.exe /C "cd . && D:\JetBrainSoftware\apps\CLion\ch-0\222.4167.35\bin\cmake\win\bin\cmake.exe -E vs_link_exe --intdir=CMakeFiles\GEMSDK.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\x64\mt.exe --manifests -- C:\PROGRA~2\MICROS~1.0\VC\bin\amd64\link.exe /nologo CMakeFiles\GEMSDK.dir\source\hsmspackage.cpp.obj CMakeFiles\GEMSDK.dir\source\main.cpp.obj /out:GEMSDK.exe /implib:GEMSDK.lib /pdb:GEMSDK.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console vcpkg_installed\x64-windows\debug\lib\workflow.lib ws2_32.lib wsock32.lib vcpkg_installed\x64-windows\debug\lib\libssl.lib vcpkg_installed\x64-windows\debug\lib\libcrypto.lib srpc.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cmd.exe /C "cd /D F:\GEMSDK\gemsdk\cmake-build-debug-visual-studio-x64 && C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file E:/vcpkg/scripts/buildsystems/msbuild/applocal.ps1 -targetBinary F:/GEMSDK/gemsdk/cmake-build-debug-visual-studio-x64/GEMSDK.exe -installedDir F:/GEMSDK/gemsdk/cmake-build-debug-visual-studio-x64/vcpkg_installed/x64-windows/debug/bin -OutVariable out""
LINK Pass 1: command "C:\PROGRA~2\MICROS~1.0\VC\bin\amd64\link.exe /nologo CMakeFiles\GEMSDK.dir\source\hsmspackage.cpp.obj CMakeFiles\GEMSDK.dir\source\main.cpp.obj /out:GEMSDK.exe /implib:GEMSDK.lib /pdb:GEMSDK.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console vcpkg_installed\x64-windows\debug\lib\workflow.lib ws2_32.lib wsock32.lib vcpkg_installed\x64-windows\debug\lib\libssl.lib vcpkg_installed\x64-windows\debug\lib\libcrypto.lib srpc.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFiles\GEMSDK.dir/intermediate.manifest CMakeFiles\GEMSDK.dir/manifest.res" failed (exit code 1104) with the following output:
LINK : fatal error LNK1104: cannot open file 'srpc.lib'
ninja: build stopped: subcommand failed.
from srpc.
@luciouskami 另外说一下,我看了具体的链接过程,牵扯到 vcpkg
使用其他的库,链接时是这样的,vcpkg_installed\x64-windows\debug\lib\libssl.lib
, 是带有路径的,但是,牵扯到 vcpkg
使用的 srpc
的库,链接时却是这样的,srpc.lib
。没有带路径。这应该是因为 cmake 模块的文件有问题。
from srpc.
C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(314,54): error C2589: “(”:“::”右边的非法标记 [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj]
C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(314): error C2062: 意外的类型“unknown-type” [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj]
C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(314,59): error C2059: 语法错误:“)” [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj]
C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(315,2): error C2143: 语法错误: 缺少“;”(在“{”的前面) [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj]
C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(319,2): error C2181: 没有匹配 if 的非法 else [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj]
编译时遇到以上错误,因为预处理器把这句话中max()当成宏来处理。
srpc/src/module/rpc_filter_metrics.cc
Line 314 in 6340b19
我临时做法:
#ifdef _MSC_VER
#pragma push_macro("max")
#undef max
#endif
.
.
.
#ifdef _MSC_VER
#pragma pop_macro("max")
#endif
希望开发者修正。
@holmes1412
from srpc.
C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(314,54): error C2589: “(”:“::”右边的非法标记 [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj] C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(314): error C2062: 意外的类型“unknown-type” [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj] C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(314,59): error C2059: 语法错误:“)” [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj] C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(315,2): error C2143: 语法错误: 缺少“;”(在“{”的前面) [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj] C:\Users\Jpsn\Desktop\srpc\src\module\rpc_filter_metrics.cc(319,2): error C2181: 没有匹配 if 的非法 else [C:\Users\Jpsn\Desktop\srpc\build64\src\module\module.vcxproj]
编译时遇到以上错误,因为预处理器把这句话中max()当成宏来处理。
srpc/src/module/rpc_filter_metrics.cc
Line 314 in 6340b19
我临时做法:
#ifdef _MSC_VER #pragma push_macro("max") #undef max #endif . . . #ifdef _MSC_VER #pragma pop_macro("max") #endif
希望开发者修正。
@holmes1412
感谢^^我改一下~
from srpc.
Windows版本的编译太难了,简直是劝退的节奏
from srpc.
Windows版本的编译太难了,简直是劝退的节奏
公司里都是linux环境。Windows没有专职的开发。不好意思。群里有不少Windows用户,可以问问。
from srpc.
Windows版本的编译太难了,简直是劝退的节奏
公司里都是linux环境。Windows没有专职的开发。不好意思。群里有不少Windows用户,可以问问。
按照这个说明文档可以编译成功,但是网络不稳定,vcpkg下载经常中断。自行从源码编译几个依赖库的时候到最后配置srpc的cmake总是失败。
from srpc.
另外编译srpc_generator的时候Windows下似乎缺少getopt.h/c,所以编译的时候会失败,需要添加一个getopt.h/c文件到工程中。
from srpc.
另外编译srpc_generator的时候Windows下似乎缺少getopt.h/c,所以编译的时候会失败,需要添加一个getopt.h/c文件到工程中。
感谢,这个我今天加一下~
from srpc.
编译srpc时报这个错
D:\GithubProjects\srpc\src\module\rpc_module.cc(168,7): error C3861: “strcasecmp”: 找不到标识符 [D:\GithubProjects\srpc\build
32\src\module\module.vcxproj]
D:\GithubProjects\srpc\src\module\rpc_module.cc(176,12): error C3861: “strcasecmp”: 找不到标识符 [D:\GithubProjects\srpc\buil
d32\src\module\module.vcxproj]
D:\GithubProjects\srpc\src\module\rpc_trace_module.cc(152,7): error C3861: “strcasecmp”: 找不到标识符 [D:\GithubProjects\srpc
\build32\src\module\module.vcxproj]
D:\GithubProjects\srpc\src\module\rpc_trace_module.cc(157,12): error C3861: “strcasecmp”: 找不到标识符 [D:\GithubProjects\srp
c\build32\src\module\module.vcxproj]
from srpc.
@EvainGGbond 你好,谢谢提醒,这两个新加的模块忘了给cmake加上windows的编译定义了,刚提交了个Pull Request修复:#338
你也可以先从我的fork上:https://github.com/holmes1412/srpc/tree/master,拉取新代码看看这次修改是否是否还有问题,感谢~ 这个Pull Request我们也会很快merge。
from srpc.
@EvainGGbond 你好,谢谢提醒,这两个新加的模块忘了给cmake加上windows的编译定义了,刚提交了个Pull Request修复:#338
你也可以先从我的fork上:https://github.com/holmes1412/srpc/tree/master,拉取新代码看看这次修改是否是否还有问题,感谢~ 这个Pull Request我们也会很快merge。
嗯呐,我自己在源码里面加上重新编译过了
from srpc.
嗯呐,我自己在源码里面加上重新编译过了
好的~因为Windows我没有编译环境,所以容易有所遗漏~如果还发现其他问题也非常欢迎提PR修复~
from srpc.
Related Issues (20)
- Srpc无法正确生成官方hbase.thrift的srpc客户端 HOT 24
- Support in API testing tool linuxsuren/api-testing HOT 7
- srpc和workflow配合使用问题 HOT 19
- 在SRPCHttpServer上启用trace上报opentelemtry功能异常 HOT 6
- 关于 RPCBuffer 中 read_back 问题 HOT 3
- 关于 RPCBuffer::cut 和 BRPC 中的 attachment 使用的问题 HOT 2
- 是否计划支持linux io_uring? HOT 3
- SRPC性能测试问题 HOT 25
- client.Echo start multi thread,how can I start only one thread? HOT 6
- thrift oneway 无法正确解析 HOT 2
- list<bool>和map返回值不能正确处理 HOT 16
- 想问一下srpc会存在粘包问题么? HOT 1
- in sync mode,It took a long time to get data from server,how can I debug? HOT 18
- srpc::ThriftClient 是否可以访问原生thrift的TMultiplexedProcessor HOT 1
- 有2层namespace时,生成代码出错 HOT 3
- 关于一个server有多个service,不能正常访问 HOT 9
- SRPC支持自定义拦截器吗 HOT 11
- SRPC Http客户端与服务端参数不一致问题 HOT 2
- openeuler下编译时会报错C++标准,建议更新C++标准从11到14 HOT 3
- 应该如何正确的报错呢? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from srpc.