【问题标题】:grpc and Intel compilergrpc 和英特尔编译器
【发布时间】:2021-08-08 04:18:57
【问题描述】:

我想使用 gRPC 作为 C++ 和 Java 组件之间的桥梁/粘合剂(在 Windows 和 Linux 上,尽管目前我对 Windows 解决方案更感兴趣)但我目前面临的主要障碍是缺乏支持某些组件使用的英特尔编译器(我想主要是由于第三方依赖项,例如不支持它的 abseil)。通常我会经历所有错误并尝试自己修复它们,但由于我不是 C++ 专家,可能最终不会很好,而且也许还有另一种方法可以绕过该问题。

我所说的“绕过”严格来说是指我不必使用 ICC 编译新组件,只要有另一种方法可以将我的新库/代码插入现有的 C++ 项目(使用 ICC 编译)。我知道我在这里过于简单化了(而使用 C++ 从未如此简单),但最后应该只是将另一个 DLL 添加到应用程序依赖项中。我阅读了一些关于混合不同 C++ 编译器的相当古老的线程,虽然不推荐它似乎可行,但关于如何做到这一点的建议似乎有点过头了,所以我想知道是否有更简单的方法来(只是)链接和使用我的库/二进制而不回退到 COM(也许近年来事情发生了变化,有更好的方法吗?)。

有没有人设法做类似的事情(另外有没有人设法用 ICC 编译 gRPC - 没有指定任何版本,因为这似乎是一个很长一段时间的问题)?

提前致谢

【问题讨论】:

    标签: c++ grpc icc


    【解决方案1】:

    Windows 上的 Dll 在涉及到其公开的 API 时需要特别小心。一些库不想打扰,也不正式支持构建为 dll。

    我从以前的经验中知道 grpc 不支持构建为 dll。你可以阅读它here。它应该是可以编译的,但是它很有可能会触发可怕的 dll 堆相关的错误。这绝对不是生产代码的方式

    一种可能的解决方案是将 grpc 静态链接到 您自己的 dll。制作一个隐藏任何 grpc API 的包装器,使用 MSVC 将其全部编译,然后将其用作 ICC 项目中的 dll 依赖项。

    【讨论】:

    • @GalAnonim:你的意思是评论你从答案中引用的那段吗?
    • "一个可能的解决方案是将 grpc 静态链接到您自己的 dll 中。制作一个隐藏任何 grpc API 的包装器,使用 MSVC 对其进行编译,然后在您的 ICC 项目中将其用作 dll 依赖项。 "这正是我正在考虑的,即。我开始围绕基于 grpc 的服务/API 编写包装器代码,ICC 编译代码将调用该包装器代码。最初的计划是用 ICC 编译整个东西,但这行不通,因此我提出了问题(对我完全缺乏 C++ 知识表示歉意,但自从我不得不处理 C++ 代码和我读过的其他线程以来,已经很久了担心)。
    • @BenVoigt:是的,抱歉 - 我按 Enter 太早了。
    • @GalAnonim 所以我认为你的方向是正确的。应该可以链接到使用不同编译器构建的 dll。您需要特别注意的是您通过 dll 边界的内容 - 例如您不应该将在您的 exe 中创建的类的实例传递给您的 dll(或反之亦然),因为不同的编译器很可能会以不同的二进制方式构建它。我会创建一个 C-api,并制作确保任何 c++ 代码都在 dll 内部。查找extern "C"
    • @GalAnonim 如果我的回答有帮助,如果您能接受,我会很高兴。如果您有任何后续问题,请成为我的客人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多