需要使用静态库构建一个grpc版本。没有插件支持,也没有构建共享库。我似乎无法找到办法。我也使用自定义版本的SSL和系统zlib并设置了所需的
cmake .. -DCMAKE_BUILD_TYPE=Release -DgRPC_ZLIB_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DOPENSSL_ROOT_DIR=<path to my ssl root>
在CentOS7上运行虽然看起来它应该是一个与平台无关的请求/功能。
我不需要进行make install,因为我们将二进制文件检查到源代码树中,以便我们的项目的其余部分将构建,然后链接这个静态版本的grpc和我们的自定义ssl。
答案 0 :(得分:0)
首先,我试图为容器构建自己的最小C / C ++ protobuf / grpc设置找到答案。我不需要所有其他语言的所有支持。
第二,将二进制文件检查到源代码存储库中?真?为此,您应该使用诸如bintray,artifactory,nexus等之类的东西。
答案 1 :(得分:0)
我有一个类似的问题,尽管就我而言,我试图弄清楚如何在Windows中进行操作。我需要静态库,但链接到动态运行时(/MD
与/MT
。)
试图自己构建gRPC。最终走了vcpkg路线,这好多了,尤其是在Windows中使用开源软件时!
但是,在Windows上,vcpkg在默认情况下仅构建两件事:完全动态或完全静态。我想要的是将静态库链接到动态运行时。为此,您必须创建自己的三元组。这是我的操作方式:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
bootstrap-vcpkg.bat
vcpkg integrate install
vcpkg integrate powershell
cd triplets
copy x64-windows.cmake x64-windows-mixed.cmake
编辑x64-windows-mixed.cmake
,使其包含以下3行:
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
然后安装并构建gRPC和protobufs:
cd ..
vcpkg.exe install grpc:x64-windows-mixed protobuf:x64-windows-mixed
如果您使用的是Linux,则默认的三元组可能已经正确,因为x64-linux.cmake
文件默认为:
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)
一旦所有内容都内置在vcpkg中,您将需要自定义项目的cmake文件以查找正确的软件,并链接正确的.a
文件。我没有在Linux上尝试此操作,但是在Windows中,我的项目包括以下内容:
FIND_PACKAGE ( protobuf CONFIG REQUIRED )
FIND_PACKAGE ( c-ares CONFIG REQUIRED )
FIND_PACKAGE ( gRPC CONFIG REQUIRED )
FIND_PACKAGE ( ZLIB REQUIRED )
FIND_PACKAGE ( OpenSSL REQUIRED )
FIND_PACKAGE ( Threads REQUIRED )
为了确保我具有正确的vcpkg include目录,我使用了以下方法:
FIND_PATH ( SYSTEM_INCLUDE_DIR zlib.h )
INCLUDE_DIRECTORIES ( ${SYSTEM_INCLUDE_DIR} )
然后在链接时,我确保TARGET_LINK_LIBRARIES
包含以下内容:
PUBLIC Threads::Threads
protobuf::libprotoc protobuf::libprotobuf protobuf::libprotobuf-lite
gRPC::gpr gRPC::grpc gRPC::grpc++ gRPC::grpc_cronet
c-ares::cares c-ares::cares_static
OpenSSL::SSL OpenSSL::Crypto
ZLIB::ZLIB )
第一次运行cmake时,请记住指定工具链文件和前缀路径。就Windows而言,我还必须告诉它要使用哪个三元组。该命令如下所示:
mkdir build
cd build
cmake \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_TOOLCHAIN_FILE=/src/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DCMAKE_PREFIX_PATH=/src/vcpkg/installed/x64-windows-mixed \
-DVCPKG_TARGET_TRIPLET=x64-windows-mixed \
..
(最后一个命令在Windows中无法以这种方式分解,我在这里只是这样做是为了帮助显示我要传入的参数。)