如何使用协议缓冲区编译成.so文件

时间:2015-05-29 08:34:49

标签: android c++ android-ndk protocol-buffers

我正在尝试在C ++项目中使用Google的协议缓冲区。我可以建立它就好了......一个iOS框架目标。但是,我似乎无法让编译器找到任何google / protobuf文件。我已经有了静态库文件(不确定这个是否适用于我的架构?我使用过:https://gist.github.com/BennettSmith/9487468ae3375d0db0cc

在proto文件的输出中,假设blah.pb.h,我引用了protobuf:

#include <google/protobuf/stubs/common.h>

编译器找不到^引用。

我试过ndk-build这样的事情:

include $(CLEAR_VARS)
LOCAL_MODULE    := libprotobuf
LOCAL_SRC_FILES := src/lib/libprotobuf.a
include $(PREBUILT_STATIC_LIBRARY)

LOCAL_SRC_FILES:=$(shell find src/lib -name '*.cpp')
LOCAL_MODULE := mymodule
LOCAL_C_INCLUDES += ./src/lib

LOCAL_STATIC_LIBRARIES := libprotobuf
include $(BUILD_SHARED_LIBRARY)

但它似乎没有任何帮助。这是怎么回事?当我有.a文件时如何包含lib protobuf?我是否必须从源代码编译它?

1 个答案:

答案 0 :(得分:0)

原来我必须做多件事:

我必须将整个protobuf include文件夹(包含所有标题的文件夹)复制到我的项目中。然后将它们包含在我的LOCAL_EXPORT_C_INCLUDES

另外,我用来做ndk-build的命令也不完全正确。它缺少大量的东西,比如缺少“字符串”或vectormap。所以我用这个代替了:

ndk-build V=1 NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk APP_STL=stlport_static

NDK - Android Java with native (JNI) C++ code build issue