grpc 和英特尔编译器

时间:2021-05-18 22:05:26

标签: c++ grpc icc

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

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

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

提前致谢

1 个答案:

答案 0 :(得分:0)

Windows 上的 Dll 在公开 API 时需要特别注意。一些库不喜欢打扰,也不正式支持构建为 dll。

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

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