linux 下
现在github 下载的速度极慢
用 让gRPC源码下得飞起 里面的办法把 grpc 源码及submodule 先下好吧
然后
git submodule update --init
mkdir build_grpc
cd build_grpc
cmake ..
sudo make install
第二次用下面的编译参数
cmake -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2r -DOPENSSL_LIBRARIES=/usr/local/Cellar/openssl/1.0.2r/lib ..
sudo make install
如果提示 Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
就安装下 下面的
sudo apt-get install libssl-dev
以下是原文章
选择合适的目录安装 grpc
git clone https://github.com/grpc/grpc.git
git tag -l -n 命令可以查看所有的版本
切换到合适的稳定版本
v1.21.3 Merge pull request #19206 from stanley-cheung/bump-to-1_21_3
比如我当前最新的文档版是 v1.21.3
也可以 直接去 https://github.com/grpc/grpc/releases 下载 最新的
git submodule update --init
mkdir build_grpc
cd build_grpc
cmake -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2r -DOPENSSL_LIBRARIES=/usr/local/Cellar/openssl/1.0.2r/lib ..
sudo make install
我的 protobuf 是已经安装好的。
编译出例程
再进入 examples/cpp/helloworld 目录下
mkdir build
cmake ..
运行 greeter_server
再运行 greeter_client
控制台打印出 hello world 表示安装成功
windows 下 不能使用!
这个可能是我当前下载的版本导致的。 我猜测, 换成稳定版本,这个问题应该就可以解决了。
安装[Active State Perl](https://www.activestate.com/activeperl/) 注册个账号就可以下载了
安装[Go](https://golang.org/dl/)
安装[yasm](http://yasm.tortall.net/) 并将其路径添加环境变量PATH
mkdir vs2015
cd vs2015
cmake .. -G "Visual Studio 14 2015"
cmake --build . --config Release
可以编译出来, 但是 不知道为什么编译成功后,无法和其他系统下的rpc服务器交互
且 客户端只能用 localhost:50051 才能和 windows上的 服务器交互
用 ip:50051 都不行。
一份 cmake 参考 小心的编辑
记得把 下面两个文件加到工程中,
${CMAKE_CURRENT_BINARY_DIR}/zyfactory.grpc.pb.cc
${CMAKE_CURRENT_BINARY_DIR}/zyfactory.pb.cc
否则 COMMAND ${_PROTOBUF_PROTOC}
并不会去生成 grpc 相应的 cpp 文件。
写给自己看的,方便将来 改改 后 创建新的工程
# This branch assumes that gRPC and all its dependencies are already installed
# on this system, so they can be located by find_package().
# Find Protobuf installation
# Looks for protobuf-config.cmake file installed by Protobuf's cmake installation.
set(protobuf_MODULE_COMPATIBLE TRUE)
find_package(Protobuf CONFIG REQUIRED)
message(STATUS "Using protobuf ${protobuf_VERSION}")
set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf)
set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>)
# Find gRPC installation
# Looks for gRPCConfig.cmake file installed by gRPC's cmake installation.
find_package(gRPC CONFIG REQUIRED)
message(STATUS "Using gRPC ${gRPC_VERSION}")
set(_GRPC_GRPCPP_UNSECURE gRPC::grpc++_unsecure)
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
# Proto file
get_filename_component(hw_proto "../../protos/zyfactory.proto" ABSOLUTE)
get_filename_component(hw_proto_path "${hw_proto}" PATH)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/zyfactory.pb.cc" "${CMAKE_CURRENT_BINARY_DIR}/zyfactory.pb.h" "${CMAKE_CURRENT_BINARY_DIR}/zyfactory.grpc.pb.cc" "${CMAKE_CURRENT_BINARY_DIR}/zyfactory.grpc.pb.h"
COMMAND ${_PROTOBUF_PROTOC}
ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}"
--cpp_out "${CMAKE_CURRENT_BINARY_DIR}"
-I "${hw_proto_path}"
--plugin=protoc-gen-grpc="${_GRPC_CPP_PLUGIN_EXECUTABLE}"
"${hw_proto}"
DEPENDS "${hw_proto}")
# Include generated *.pb.h files
include_directories("${CMAKE_CURRENT_BINARY_DIR}")
include_directories(${PROJECT_SOURCE_DIR}/src/base)
include_directories(${PROJECT_SOURCE_DIR}/include)
set(UA_BRIDGE_SRC
bridgeapp.cc
../opcclient.cc
../hook_opclog.cc
opcs.cc
api.cc
bconf.cc
${CMAKE_CURRENT_BINARY_DIR}/zyfactory.grpc.pb.cc
${CMAKE_CURRENT_BINARY_DIR}/zyfactory.pb.cc
)
add_library(zyfactory_uabridge
${UA_BRIDGE_SRC})
target_link_libraries(zyfactory_uabridge
zyfactory_base)
message(STATUS "PROJECT_SOURCE_DIR : ${PROJECT_SOURCE_DIR}")
message(STATUS "SYS_LIBS : ${SYS_LIBS}")
add_executable(ua-bridge
main.cc
${PROJECT_SOURCE_DIR}/3rd/open62541/open62541.c
)
target_link_libraries(ua-bridge
zyfactory_base
zyfactory_uabridge
${_GRPC_GRPCPP_UNSECURE}
${_PROTOBUF_LIBPROTOBUF}
${SYS_LIBS})
add_custom_command(TARGET ua-bridge POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/config/* ${BIN_DIR}
)