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

2024-04-24

我在使用 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. 构建提升



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_static
APP_PLATFORM := android-3
APP_CPPFLAGS += -mthumb
APP_CPPFLAGS += -Os
APP_CPPFLAGS += -fno-strict-aliasing
APP_CPPFLAGS += -O2
APP_CPPFLAGS += -DNDEBUG
APP_CPPFLAGS += -g
APP_CPPFLAGS += -fexceptions
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -lstdc++
APP_CPPFLAGS += -D__GLIBC__
APP_CPPFLAGS += -DBOOST_NO_INTRINSIC_WCHAR_T
APP_CPPFLAGS += -L/cygdrive/d/Android/boost_1_46_0/android/lib/
  

5.Android.mk



#   Howto
#   http://source.android.com/porting/build_cookbook.html
#

LOCAL_PATH:= $(call my-dir)

# ==============================================================
# libudt
# ==============================================================

include $(CLEAR_VARS)
LOCAL_MODULE            :=  libudt
LOCAL_C_INCLUDES        +=  /cygdrive/d/Android/boost_1_46_0/
LOCAL_SRC_FILES         +=  udt.cpp
LOCAL_STATIC_LIBRARIES  :=  boost_thread-gcc-mt-s-1_46

include $(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_tIvPFv
iENS2_5list1INS2_5valueIiEEEEEEEE[typeinfo for boost::detail::thread_data > > >]+0x8): undefined reference to `typeinfo for boost::detail::thread_data_base'
collect2: ld returned 1 exit status
make: *** [/cygdrive/d/Android/boost_link/obj/local/armeabi/libudt.so] Error 1
  

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何与android的静态boost库链接? 的相关文章

随机推荐

  • Ruby on Rails 3:link_创建新的嵌套资源?

    我试图在 Rails 3 应用程序中创建一个链接来创建新的嵌套资源 但我无法弄清楚 链接到新嵌套资源的语法是什么 解决方案 确保您的资源正确嵌套在您的路由文件中 resources books do resources chapters e
  • Amazon S3:授予来自 IP 的匿名访问权限(通过存储桶策略)

    我有一个 Amazon S3 存储桶 并且希望将其可供特定计算机上的脚本使用 而无需部署登录凭证 所以我的计划是只允许从该机器的 IP 进行匿名访问 我对亚马逊云还很陌生 存储桶策略看起来是不错的选择 我将以下策略添加到我的存储桶中 Ver
  • 如何解决“允许的最大密钥长度为 900 字节”。

    我有以下表结构 CREATE TABLE dbo Signature caption id nvarchar 512 NOT NULL signature id int NOT NULL 我想使用以下 alter 命令添加主键 ALTER
  • C# 中 System.String[*] 和 System.String[] 的区别

    Edit 我知道 C 相当于For Each server As String In servers is foreach var item in servers 但是由于GetOPCServers返回对象 应该将其转换为可迭代类型 我正在
  • 页面抓取以从谷歌财经获取价格

    我试图通过抓取谷歌金融页面来获取股票价格 我在 python 中使用 urllib 包 然后使用正则表达式来获取价格数据 当我让 python 脚本运行时 它最初会运行一段时间 几分钟 然后开始抛出异常 HTTP 错误 503 服务不可用
  • 如何设置“如果对象存在”条件?

    有没有办法检查对象是否存在 我不断收到 需要对象 错误 我知道该对象不存在 如果是这种情况 我想绕过我的代码的一部分 我不知道什么是我没有尝试过的 var codeName document getElementById testCode
  • 如何阻塞直到BlockingQueue为空?

    我正在寻找一种方法来阻止直到BlockingQueue是空的 我知道 在多线程环境下 只要有生产者将物品放入BlockingQueue 可能会出现队列变空 几纳秒后又充满项目的情况 但是 如果只有one生产者 那么它可能希望在停止将项目放入
  • 为 iPhone 或 Android 开发? (作为 C# 开发人员)[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 R 提取包含特定人名的句子

    我正在使用 R 来提取包含特定人名的句子来自文本 这是一个示例段落 在蒂宾根 他作为改革家遭到反对 但在他的叔公约翰 罗伊克林的推荐下 他接受了马丁 路德的召唤 进入维滕贝格大学 梅兰希顿 21 岁时成为维滕贝格的希腊语教授 他研究圣经 尤
  • 根据 Python Pandas 中的描述场景和状态过滤产品

    假设我在 Pandas DataFrame 中有以下产品描述 我想保留满足以下条件的产品的所有产品描述 对于每一个id in product descriptions 检查是否包含全部descriptions从 至少 1 个场景scenar
  • DocumentDB IN 关键字与 Linq

    您现在可以使用 DocumentDB 创建 IN 查询 如下所示 SELECT FROM Families WHERE Families id IN AndersenFamily WakefieldFamily 但如果我使用 Linq 运行
  • Python GTTS 错误:AttributeError:“NoneType”对象没有属性“group”

    我有一个项目正在进行文本到语音转换 我的音频文件被存储为 mp3 但现在 当我检查 Gtts api 时抛出错误 我尝试搜索但找不到该错误的可行解决方案 我的代码如下 def synth sent language en slow Fals
  • 如何在 Raspberry Pi 上安装 PhantomJS 以便与 Python Selenium 一起使用?

    我想使用运行 Python 脚本Selenium WebDriver with PhantomJS作为我的无头浏览器树莓派运行 Raspbian 我最初在 OS X 中编写了该脚本 它运行良好 但在尝试让它在树莓派上工作时 我遇到了问题 当
  • 如何在 Palantir Foundry 中合并具有相同模式的多个数据集?

    我有几个数据集想要在 Palantir Foundry 中合并 我提前知道数据集是什么 所有数据集的架构都是相同的 即它们具有相同的列名称和列类型 组合 联合 这些数据集的最佳方法是什么 数据集A col1 col2 1 a 2 b 数据集
  • Pandas 使用列作为后缀进行透视

    我有一个类似于以下示例的数据框 Id Type Value 1 Value 2 1234 A 1 2 1234 B 1 2 789 A 1 2 789 B 1 2 567 A 1 2 我想转换以获得以下内容 Id Value 1 A Val
  • 用于反转字节顺序/更改字节顺序的命令行

    我在一些脚本中尝试解析 Java 编写的一些数据DataOutputStream writeLong 由于java似乎总是写大端 所以我在将字节输入到od 这是因为od总是假设字节序与您当前所在的拱门的字节序相匹配 而我在一台小字节序机器上
  • Erlang:如何限制分配给进程的内存

    我要问的是是否可以限制分配给特定进程的内存 堆或堆栈 以便该进程不能超过它 也许类似于 process flag min heap size MinHeapSize 但针对最大堆 您可以将某种进程跟踪 gen server 放在一起 定期检
  • 在 socket.io-client 中调用 IO 时出现错误,角度 8

    我在我的 Angular 项目中调用 socket io client 的 IO 如下所示 import Injectable from angular core import Observable from rxjs internal O
  • 在未压缩的 PDF 中进行集体内联编辑

    我有一个很大的 PDF 20mb 160mb 未压缩 我需要在其中的文本中进行查找和替换 大约 1000 次 这是我尝试过的 Via SVG 转换为 SVG inkscape 逐行读取 SVG 并在文件中进行替换 转换回 PDF gt 输出
  • 如何与android的静态boost库链接?

    我在使用 Android ndk r5b 将 boost 库移植和链接到 android 时遇到问题 我首先使用以下步骤构建 boost 库 没有 mpi python 1 注释掉boost 1 46 0 libs thread build