UE4接入Protobuf注意事项

protobuf 3.11

直接接入源码

禁用警告
在port_def.inc开头添加

#ifdef _MSC_VER
#pragma warning(disable: 4125)
#pragma warning(disable: 4800)
#pragma warning(disable: 4018)
#pragma warning(disable: 4506)
#endif //_MSC_VER

禁用RTTI
在message.h开头添加

#ifndef GOOGLE_PROTOBUF_NO_RTTI
#define GOOGLE_PROTOBUF_NO_RTTI
#endif

非windows下开启宏HAVE_PTHREAD
protobuf/stubs/common.cc注释两行

//#else
//#error "No suitable threading library available."

并对安卓做以下处理#define(HAVE_PTHREAD)

#if defined(__ANDROID__)
#include <android/log.h>
#define HAVE_PTHREAD
#endif

处理报错bswap_16,bswap_32,bswap_64
protobuf/stubs/port.h 暴力解决,注释掉下面几行,因为后面可以有直接的函数定义

//#ifdef _MSC_VER
//#define bswap_16(x) _byteswap_ushort(x)
//#define bswap_32(x) _byteswap_ulong(x)
//#define bswap_64(x) _byteswap_uint64(x)

//#elif defined(__APPLE__)
 Mac OS X / Darwin features
//#define bswap_16(x) OSSwapInt16(x)
//#define bswap_32(x) OSSwapInt32(x)
//#define bswap_64(x) OSSwapInt64(x)
//
//#elif !defined(__GLIBC__) && !defined(__BIONIC__) && !defined(__CYGWIN__)

这是定义

#ifndef bswap_16
static inline uint16 bswap_16(uint16 x) {
  return static_cast<uint16>(((x & 0xFF) << 8) | ((x & 0xFF00) >> 8));
}
#define bswap_16(x) bswap_16(x)
#endif

#ifndef bswap_32
static inline uint32 bswap_32(uint32 x) {
  return (((x & 0xFF) << 24) |
          ((x & 0xFF00) << 8) |
          ((x & 0xFF0000) >> 8) |
          ((x & 0xFF000000) >> 24));
}
#define bswap_32(x) bswap_32(x)
#endif

#ifndef bswap_64
static inline uint64 bswap_64(uint64 x) {
  return (((x & PROTOBUF_ULONGLONG(0xFF)) << 56) |
          ((x & PROTOBUF_ULONGLONG(0xFF00)) << 40) |
          ((x & PROTOBUF_ULONGLONG(0xFF0000)) << 24) |
          ((x & PROTOBUF_ULONGLONG(0xFF000000)) << 8) |
          ((x & PROTOBUF_ULONGLONG(0xFF00000000)) >> 8) |
          ((x & PROTOBUF_ULONGLONG(0xFF0000000000)) >> 24) |
          ((x & PROTOBUF_ULONGLONG(0xFF000000000000)) >> 40) |
          ((x & PROTOBUF_ULONGLONG(0xFF00000000000000)) >> 56));
}
#define bswap_64(x) bswap_64(x)
#endif
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值