【问题标题】:How can I build a minimal static version of grpc for C/C++如何为 C/C++ 构建最小的静态 grpc 版本
【发布时间】:2018-03-09 17:38:53
【问题描述】:

需要构建一个只有静态库的 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。

【问题讨论】:

    标签: grpc


    【解决方案1】:

    首先,我正在尝试自己为容器构建找到最小 C/C++ protobuf/grpc 设置的答案。我不需要所有其他语言的所有支持。

    其次,将您的二进制文件检入源代码存储库?真的吗?为此,您应该使用 bintray、artifactory、nexus 等。

    【讨论】:

    • RE:其次。不是我的电话我们如何签入/管理二进制文件等。高于我的工资等级。我确实得到了最小的构建工作。
    • 我知道您对基础架构的意思。也许建议它?你可能会被感谢。这是关于构建的好消息。有没有机会分享一下你是怎么做到的?
    【解决方案2】:

    我有一个类似的问题,但在我的情况下,我试图弄清楚如何在 Windows 中做到这一点。我想要静态库,但链接到动态运行时(/MD/MT。)

    尝试自己构建 gRPC。最终选择了vcpkg 路线,这要好得多,尤其是在 Windows 中使用开源软件时!

    但是,在 Windows 上,vcpkg 默认只构建 2 个东西:完全动态或完全静态。我想要的是与动态运​​行时链接的静态库。为此,您必须创建自己的三元组。这是我的做法:

    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 包含目录,我使用了这个:

    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 中不能以这种方式分解,我在这里只是为了帮助显示我传入的参数。)

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多