如何与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库链接? 的相关文章

  • Android SHA1 发布密钥库无法与 Google 地图配合使用

    我正在使用 Google Maps Android API 但遇到了一些问题 我正在使用 android studio 签署我的 apk 在 android keystore jks 创建一个 另外 我选择 发布 作为其中的类型 我已经使用
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 以编程方式向 LinearLayout 添加边框

    我该如何添加以编程方式LinearLayout 的边框 假设我们创建了这个布局 LinearLayout TitleLayout new LinearLayout getApplicationContext TitleLayout setO
  • 如何通过 JsonConvert.DeserializeObject 在动态 JSON 中使用 null 条件运算符

    我正在使用 Newtonsoft 反序列化已知的 JSON 对象并从中检索一些值 如果存在 关键在于对象结构可能会不断变化 因此我使用动态来遍历结构并检索值 由于对象结构不断变化 我使用 null 条件运算符来遍历 JSON 代码看起来像这
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • Android S8+ 警告消息“不支持当前的显示尺寸设置,可能会出现意外行为”

    我在 Samsung S8 Android 7 中收到此警告消息 APP NAME 不支持当前的显示尺寸设置 可能会 行为出乎意料 它意味着什么以及如何删除它 谢谢 通过添加解决supports screens 机器人 xlargeScre
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 如何在android中安装和使用couch db

    我应该如何在 android 中安装和使用 couch Db 我的意思是本地沙发数据库 我可以在平板电脑和模拟器中使用它 为此我必须遵循哪些步骤 我目前正在开发一个使用它的项目 有两种选择 1 couchbase android 是的 co
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • View.post(),以及当Runnables被执行时

    我最初的问题是需要知道我的根的高度和宽度View这样我就可以进行程序化的布局更改 就我的目的而言 我不一定需要在onCreate 对于我来说 以编程方式添加我的孩子就足够了View根布局完成后 因此我很乐意使用onWindowFocusCh

随机推荐

  • 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