gpt4 book ai didi

c++ - 如何与android的静态boost库链接?

转载 作者:IT老高 更新时间:2023-10-28 22:22:33 24 4
gpt4 key购买 nike

我在使用 Android-ndk-r5b 将 boost 库移植和链接到 android 时遇到问题。我首先使用以下步骤构建 boost 库(没有 mpi、python):

1.注释了 boost_1_46_0\libs\thread\build 中的第 53 行:

#   if [ os.name ] = "NT" { api = win32 ; }

2。在 boost 根目录下创建文件 user-config.jam

androidNDKRoot = ../android-ndk-r5b ;using gcc : android4.4.3 : $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-g++.exe :    --sysroot=$(androidNDKRoot)/platforms/android-3/arch-arm    -mthumb    -Os    -fno-strict-aliasing    -O2    -DNDEBUG    -g    -fexceptions    -frtti    -lstdc++    -I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/include    -I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include    -D__GLIBC__    -DBOOST_NO_INTRINSIC_WCHAR_T    $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ar.exe    $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ranlib.exe    linux;

3。构建 boost

bjam.exe --user-config=user-config.jam --without-python --without-mpi toolset=gcc-android4.4.3 link=static runtime-link=static target-os=linux --stagedir=android > d:\out.txt

4。应用程序.mk

APP_STL := gnustl_staticAPP_PLATFORM := android-3APP_CPPFLAGS += -mthumbAPP_CPPFLAGS += -OsAPP_CPPFLAGS += -fno-strict-aliasingAPP_CPPFLAGS += -O2APP_CPPFLAGS += -DNDEBUGAPP_CPPFLAGS += -gAPP_CPPFLAGS += -fexceptionsAPP_CPPFLAGS += -frttiAPP_CPPFLAGS += -lstdc++APP_CPPFLAGS += -D__GLIBC__APP_CPPFLAGS += -DBOOST_NO_INTRINSIC_WCHAR_TAPP_CPPFLAGS += -L/cygdrive/d/Android/boost_1_46_0/android/lib/

5。安卓.mk

#   Howto#   http://source.android.com/porting/build_cookbook.html#LOCAL_PATH:= $(call my-dir)# ==============================================================# libudt# ==============================================================include $(CLEAR_VARS)LOCAL_MODULE            :=  libudtLOCAL_C_INCLUDES        +=  /cygdrive/d/Android/boost_1_46_0/LOCAL_SRC_FILES         +=  udt.cppLOCAL_STATIC_LIBRARIES  :=  boost_thread-gcc-mt-s-1_46include $(BUILD_SHARED_LIBRARY)

6。 udt.cpp

#include "boost/bind.hpp"#include "boost/thread.hpp"void thread_fn (int){}extern "C" int func1 (){    boost::thread thrd (boost::bind (thread_fn, 1));    thrd.join ();    return 0;}

7。 $NDK/ndk-build

Compile++ thumb  : udt  > > >':D:/Android/boost_1_46_0/boost/thread/detail/thread.hpp:204: undefined reference to `boost::thread::start_thread()'D:/Android/boost_link/obj/local/armeabi/objs/udt/udt.o: In function `func1':D:/Android/boost_link/jni/udt.cpp:19: undefined reference to `boost::thread::join()'D:/Android/boost_link/jni/udt.cpp:20: undefined reference to `boost::thread::~thread()'D:/Android/boost_link/jni/udt.cpp:20: undefined reference to `boost::thread::~thread()'D:/Android/boost_link/obj/local/armeabi/objs/udt/udt.o:(.data.rel.ro._ZTIN5boost6detail11thread_dataINS_3_bi6bind_tIvPFviENS2_5list1INS2_5valueIiEEEEEEEE[typeinfo for boost::detail::thread_data > > >]+0x8): undefined reference to `typeinfo for boost::detail::thread_data_base'collect2: ld returned 1 exit statusmake: *** [/cygdrive/d/Android/boost_link/obj/local/armeabi/libudt.so] Error 1

最佳答案

我们目前通过在库的 makefile 中简单地包含相关的 boost 文件来使用 boost 的某些部分。

关于c++ - 如何与android的静态boost库链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5119201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com