[UE4]链接libprotobuf时出现错误LNK2005

[UE4]error LNK2005 on linking libprotobuf

在打包 Unreal Engine 4.27 项目时遇到库冲突的小问题。

我的项目包含 this gRPC library from google and I followed these 个使用 CMake 构建它并将其包含在我的 Unreal 项目中的步骤。

此外,我的项目需要启用 PixelStreaming 插件。然而,这个插件似乎导入了另一个版本的 protobuf,它在打包时与 gRPC 中包含的版本冲突。

错误如下:

libprotobuf.lib(coded_stream.obj) : error LNK2005: "public: __cdecl google::protobuf::io::CodedOutputStream::CodedOutputStream(class google::protobuf::io::ZeroCopyOutputStream *,bool)" (??0CodedOutputStream@io@protobuf@google@@QEAA@PEAVZeroCopyOutputStream@123@_N@Z) already defined in webrtc.lib(coded_stream.obj)

针对不同的对象出现。

我遇到过类似的问题as such,但禁用 gRPC 对我来说不是一个可行的解决方案。

GCP 库也有同样的问题。 这个问题似乎是由 Protobuf 的错误提交引起的(3.16.0 GRPC 链接的分支似乎没有正确构建)

如果您手动构建不同的 protobuf 分支并使用 -DgRPC_PROTOBUF_PROVIDER=package 构建 gRPC 时的选项你应该能够让它工作。 我在 msys 环境中工作,所以不是一对一,但我构建 protobuf 和 grpc 的命令是。

//原型增益 C:/msys64/mingw64/bin/cmake.exe -H. -Bbuild-output -G "MinGW Makefiles" -DCMAKE_MAKE_PROGRAM=C:/msys64/mingw64/bin/mingw32-make.exe -DCMAKE_C_COMPILER=C:/msys64/mingw64/bin/gcc.exe -DCMAKE_CXX_COMPILER=C: /msys64/mingw64/bin/g++.exe -DCMAKE_INSTALL_MESSAGE=从不 -DCMAKE_BUILD_TYPE=发布 -DBUILD_SHARED_LIBS=开启 -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_TESTS=关闭 -Dprotobuf_ABSL_PROVIDER=包裹

//gprc C:/msys64/mingw64/bin/cmake.exe -H. -Bbuild-output -G "MinGW Makefiles" -DCMAKE_MAKE_PROGRAM=C:/msys64/mingw64/bin/mingw32-make.exe -DCMAKE_C_COMPILER=C:/msys64/mingw64/bin/gcc.exe -DCMAKE_CXX_COMPILER=C: /msys64/mingw64/bin/g++.exe -DCMAKE_INSTALL_MESSAGE=从不 -DCMAKE_BUILD_TYPE=发布 -DBUILD_SHARED_LIBS=开启 -DCMAKE_CXX_STANDARD=17 -DgRPC_INSTALL=开启 -DgRPC_BUILD_TESTS=关闭 -DgRPC_ABSL_PROVIDER=套餐 -DgRPC_CARES_PROVIDER=套餐 -DgRPC_PROTOBUF_PROVIDER=套餐 -DgRPC_RE2_PROVIDER=套餐 -DgRPC_SSL_PROVIDER=套餐 -DgRPC_ZLIB_PROVIDER=套餐

构建 protobuf 3.20.x 似乎对我有用(尽管 absl 有问题)

解决我问题的方法是迁移到 UE5。

使用上述grpc项目相同的步骤,在UE5新建项目中。在 UE5 项目的 ThirdPary 文件夹中有一个 libprotobuf.lib,打包过程没有 LINK 冲突。不知道为什么 UE 包装这次没有抱怨,但有效,有效!