Ubuntu下编译boost for Android

下载https://github.com/moritz-wundke/Boost-for-Android

解压后进入目录

运行 ./build-android.sh $(NDK_ROOT)

NDK_ROOT就是ndk-build所在的那个目录

然后会自动下载源码进行编译,NDK r19以上会自动选择c++_shared runtime library,会下载1.70版,然后生成多个ABI的库

若要选择其它的运行时库等等,需要修改build-android.sh???具体不会

生成后在Android studio里使用,如下配置cmake

##########添加boost库 begin#########
#因为不存在findboost.cmake所以手动配置
#之后就可使用后就可用${Boost_INCLUDE_DIR}和${Boost_LIBRARIES}了
#set(Boost_ADDITIONAL_VERSIONS "1.70")
set(BOOST_ROOT /home/hk/Android/boost/${ANDROID_ABI})
set(Boost_INCLUDE_DIR ${BOOST_ROOT}/include/boost-1_70)
set(Boost_LIBRARY_DIR ${BOOST_ROOT}/lib)
#用通配符同时添加多个lib库文件依赖
file(GLOB Boost_LIBRARIES "${Boost_LIBRARY_DIR}/libboost*.a")

include_directories(${Boost_INCLUDE_DIR})
##########添加boost库 end######################################

这样链接

#链接库
target_link_libraries(
        native-lib
        ${Boost_LIBRARIES}
)

 测试代码为

//测试boost
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myvio_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello MyVIO";

    //boost::dynamic_bitset<> db4(std::string("0100"));
    //db4.flip();//1011
    /*for(int i=0;i<4;i++)
        if(db4[i]==1)
            hello=hello+"1";
        else
            hello=hello+"0";*/

    boost::dynamic_bitset<> db4(4, BOOST_BINARY(1010));
    db4[0] &= 1;
    db4[1] ^= 1;
    //注意右边是低位
    for(int i=0;i<4;i++)
        if(db4[i]==1)
            hello=hello+"1";
        else
            hello=hello+"0";


    return env->NewStringUTF(hello.c_str());
}

 

posted @ 2019-09-15 00:51  2523984508  阅读(1458)  评论(0编辑  收藏  举报