Ошибка компиляции Android "неопределенная ссылка на" с ABI arm64-v8a - PullRequest
0 голосов
/ 18 января 2019

Среда:

protocol buffer: 2.5.0
ndk: android-ndk-r13b
ant: apache-ant-1.9.4
cocos2d-x: 3.12
os: mac 10.12

Я долгое время компилировал с APP_ABI = armeabi-v7a (из файлов .h и .cc из https://github.com/protocolbuffers/protobuf/releases/tag/v2.5.0), и все отлично работает.

Но недавно мне пришлось добавить arm64-v8a к APP_ABI, и я начал получать следующие ошибки:

stubs/once.h:125: undefined reference to 
google::protobuf::internal::Acquire_Load(long const volatile*)

Затем я проверил и обнаружил, что Acquire_Load объявлен в stubs/atomicops.h с макросом:

#ifdef GOOGLE_PROTOBUF_ARCH_64_BIT
// ......
Atomic64 Acquire_Load(volatile const Atomic64* ptr);
// ......
#endif  // GOOGLE_PROTOBUF_ARCH_64_BIT

И макрос GOOGLE_PROTOBUF_ARCH_64_BIT определен в stubs/platform_macros.h:

#if defined(_M_X64) || defined(__x86_64__)
#define GOOGLE_PROTOBUF_ARCH_X64 1
#define GOOGLE_PROTOBUF_ARCH_64_BIT 1
#elif defined(_M_IX86) || defined(__i386__)
#define GOOGLE_PROTOBUF_ARCH_IA32 1
#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
#elif defined(__QNX__)
#define GOOGLE_PROTOBUF_ARCH_ARM_QNX 1
#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
#elif defined(__ARMEL__)
#define GOOGLE_PROTOBUF_ARCH_ARM 1
#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
#elif defined(__MIPSEL__)
#define GOOGLE_PROTOBUF_ARCH_MIPS 1
#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
#elif defined(__pnacl__)
#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
#elif defined(__ppc__)
#define GOOGLE_PROTOBUF_ARCH_PPC 1
#define GOOGLE_PROTOBUF_ARCH_32_BIT 1
#elif defined(__aarch64__)
#define GOOGLE_PROTOBUF_ARCH_ARM 1
#define GOOGLE_PROTOBUF_ARCH_64_BIT 1
#else
#error Host architecture was not detected as supported by protobuf
#endif

Я не очень знаком с компиляцией, поэтому не могу понять, где что-то не так.

Любой совет будет оценен, спасибо:)

...