Android 交叉编译 libevent

2024-03-01

我一直在尝试将 libevent 交叉编译到 Android,我想知道我做错了什么并获得一些帮助。

我尝试构建的版本是 libevent-2.0.19-stable

我开始按照以下描述的步骤进行操作http://warpedtimes.wordpress.com/2010/02/03/building-open-source-libraries-with-android-ndk/ http://warpedtimes.wordpress.com/2010/02/03/building-open-source-libraries-with-android-ndk/ and 如何将Makefile重写为android.mk? https://stackoverflow.com/questions/10040693/how-to-rewrite-the-makefile-into-android-mk

目标设备是运行cyyogenMod 7的三星Galaxy S2

经过多次尝试,我做得最好的是运行以下步骤:

1) Install android NDK and download libevent source code

2) Android NDK downloaded and running in ~/android-ndk/android-ndk-r8b

3)执行:

export ANDROID_ROOT=~/android-ndk/android-ndk-r8b

export    PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/

您需要导出设备的 ABI。 armeabi-v7a 适用于 ARMv7 或更高版本的设备,任何其他设备都使用armeabi。

4) 使用适当的参数执行./configure:

./configure \
--host=arm-linux-androideabi \
CC=arm-linux-androideabi-gcc \
LD=arm-linux-androideabi-ld \
CPPFLAGS="-I$ANDROID_ROOT/platforms/android-8/arch-arm/usr/include/" \
CFLAGS="-nostdlib" \
LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/" \
LIBS="-lc"

与此同时,有一个警告:

configure: WARNING: if you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used

(我认为没问题)

由于它无法将arm-linux-androideabi识别为主机,因此我从以下位置获得了新的config.guess和config.subhttp://git.savannah.gnu.org/gitweb/?p=config.git;a=tree http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree(在 Stack Overflow 的上一个线程中指出)

此时,构建源代码运行“make”时,仍然崩溃:

/home/narseo/android-ndk/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: crtbegin_so.o: No such file: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [libevent.la] Error 1
make[2]: se sale del directorio «/home/narseo/libevent-source/libevent-2.0.19-stable»
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio «/home/narseo/libevent-source/libevent-2.0.19-stable»
make: *** [all] Error 2

但是,该文件似乎在那里:

~/android-ndk$ ls $ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib
crtbegin_dynamic.o  libc.a           libjnigraphics.so  libstdc++.so
crtbegin_so.o       libc.so          liblog.so          libthread_db.so
crtbegin_static.o   libdl.so         libm.a             libz.so
crtend_android.o    libGLESv1_CM.so  libm.so
crtend_so.o         libGLESv2.so     libstdc++.a

运行 ./configure 时我做错了什么吗?即使查看 Android 的 NDK 文档,我也不明白的是是否必须创建 Android.mk 或者 Makefile 是否足够

非常欢迎任何帮助!

Cheers

N

Note

这就是我最终设法解决它的方法:

初始路径:

export ANDROID_ROOT=~/android-ndk/android-ndk-r8b
export PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/
export PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/include/

错误似乎发生在链接阶段,因此找不到 crtend_so.o 和 crtbegin_so.o。下列的android 工具链缺少 crtbegin_so.o (自定义构建) https://stackoverflow.com/questions/6881164/crtbegin-so-o-missing-for-android-toolchain-custom-build,我们在源文件夹中添加一个符号链接

cd source && ln -s $ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/crtbegin_so.o 
ln -s $ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/crtend_so.o 

./configure命令:

./configure \
--host=arm-linux-androideabi \
CC=arm-linux-androideabi-gcc \
LD=arm-linux-androideabi-ld \
CPPFLAGS="-I$ANDROID_ROOT/platforms/android-8/arch-arm/usr/include/" \
CFLAGS="-nostdlib" \
LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/" \
LIBS="-lc"

如果由于无法识别系统 androideabi 而失败,请尝试获取更新版本的 config.sub 和 config.guess

它曾经在链接阶段崩溃。在 CFLAGS 中包含 -lgcc 解决了该问题。


该项目在 Android 上将 libevent 构建为静态库:https://github.com/ventureresearch/libevent https://github.com/ventureresearch/libevent

它包括 Android.mk 和生成的配置文件以干净地构建它。

请注意,我们构建它是为了将其包含到 Android 设备映像中,而不是通过 NDK 进行构建。它可能仍然是一个很好的起点。

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

Android 交叉编译 libevent 的相关文章

  • 嵌套 XML 布局文件

    android 有没有办法从另一个布局文件引用 xml 布局文件 为了更好地解释 我有一个名为layout1 xml 和layout2 xml 的布局文件 我可以从layout1 xml引用layout2 xml吗 用这个
  • 如何在不使用 Firebase 控制台的情况下发送 Firebase 云消息通知?

    我从新的 Google 通知服务开始 Firebase Cloud Messaging 感谢这段代码https github com firebase quickstart android tree master messaging htt
  • 4 天后,应用仍未在 Google Play 搜索中编入索引

    我已经在 4 天前在 google play 上发布了我的第一个应用程序 语音到短信 但我仍然无法通过其名称或开发人员名称在搜索中找到我的应用程序 我只能通过包名称或真实应用程序名称 但不带空格 找到我的应用程序 VoiceToSMS 链接
  • relativelayout导致动画不起作用?

    我有一个活动 其布局仅包含一个 VideoView 这是 XML
  • 如何使用 RecyclerView 创建此布局?

    我正在尝试使用这种类型的布局创建回收器视图 这些项目是字符串 可以以不同的大小出现 我不知道每行中有多少项目 我可以使用 StaggeredGridLayoutManager 来做到这一点吗 该图像只是一个假示例 每行可以有更多项目 您可能
  • 如何清除Android剪贴板?

    我发现的方法都不起作用 这是我尝试过的 1 使用clearPrimaryClip 的方法ClipboardManager class ClipboardManager clipboard ClipboardManager getSystem
  • Android L,使用 joda.time 库的异常

    该应用程序适用于所有设备 包括 nexus 5 和 nexus 7 在 Android L 预览版上运行相同的应用程序时 应用程序崩溃了 我一直在调试 并且调用 DateTime 构造函数发现了异常 public static String
  • Android 和 Google 地图内部片段以及其他控件和 viewpager

    我是android编程新手 我有一个带有 3 个页面 片段 的小应用程序 使用 pageradapter 和 viewpager 在它们之间滑动 其中一个页面包含复选框 和其他控件 和地图 我的问题是程序在启动时崩溃 Fragment co
  • 在 Android 中加密/解密字符串的简单方法

    我的问题是如何加密String String AndroidId Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceSta
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • 如何将 JSON 数据从 Android 发送到 php url?

    我想将登录信息从我的应用程序发送到 php url 因为这我的应用程序将崩溃 任何人都可以帮助我解决这个问题 这是我的服务器登录方法 我想将数据发送到此登录方法 Method public method login Parameters 3
  • 活动加载缓慢

    我的应用程序中有大约 50 个活动 但其中一个活动非常慢 我的意思是当我按下按钮进入该活动时 需要很长时间 有时会出现黑屏 在该活动中 我有一个按钮 如果我单击该按钮 则需要很长时间才能执行 代码很轻 只有一个Button EditText
  • 了解应用程序在后台时何时收到 Firebase 消息

    我知道这个标题有同样的问题 但不幸的是它没有得到正确的回答 它被接受了 here https stackoverflow com questions 37711082 how to handle notification when app
  • 调试android数据绑定?

    谁能告诉我如何调试或找到数据绑定生成的代码 从this https www youtube com watch v NBbeQMOcnZ0链接我发现它生成了所需的代码 我猜您正在寻找自动生成的绑定 java 文件 我也在寻找他们 最后我在这
  • TabLayout 的不同 tabMode

    我正在使用 ViewPager 和 TabLayout 如果选项卡可以放置在显示 tabMode 上 则它们必须是 app tabMode fixed else app tabMode scrollable 我怎样才能做到这一点 我不明白你
  • Android AppWidgetManager 方法 updateAppWidget 无法设置意图、加载数据。而且它是随机发生的

    我的小部件由 2 个按钮和一个显示数据的列表视图组成 大多数时候 当调用小部件提供程序的 onUpdate 方法时 一切都会正常加载 每个人都很高兴 但是我注意到有时在调用更新方法后 小部件完全无法加载其数据 列表视图为空 所有按钮均无响应
  • 动态更改按钮上的图像视图

    在我的应用程序中 我有按钮和ImageView 当我按下按钮时我想改变ImageView 我的可绘制文件夹中有 5 张图像 按下按钮时 ImageView 根据按钮单击一张一张地更改图像 我想要它的解决方案 感谢任何可以提供帮助的人 维护一
  • 在数组列表中过滤 Filterable 不取消之前的过滤

    我看过过滤器方法文档 其中显示调用过滤器会取消所有先前未执行的过滤请求 并发布一个稍后将执行的新过滤请求 但我收到的实际回调有些不同 在我的实现中 它不会取消先前的过滤器请求并调用publishResults 最近一次搜索条件后的上一次搜索
  • 如何正确处理 ListView 内的 Android EditText 输入?

    在我的应用程序中 我有一个在 a 中添加 删除 编辑记录的活动SortedMap 该活动作为以下活动的延伸实施ListActivity 我已经实现了自定义ArrayAdapter对于收藏品 Every ListView项目 对应于基础记录

随机推荐

  • XSD:大型模式验证

    我正在尝试使用 JAXP 和 SAX 解析器根据非常大的工业模式验证 xml 文件 问题是 验证即使是很小的 XML 文件也需要很长时间 我正在运行 Apache Tomcat 6 0 我尝试将堆大小增加到 1024 但这没有多大帮助 我还
  • 在 Visual Studio 中调试可执行文件

    想要在调试器下调试可执行文件 如何在视觉工作室中做到这一点 Windbg 有一个打开可执行文件的选项 但我发现 VS 2010 中缺少这一点 这个问题并不完全相同在 Visual Studio 2010 中调试 exe https stac
  • 字符串的长度超过了 maxJsonLength 属性上设置的值

    我正在通过 jQuery 加载选项卡内容数据ajax通过 web 方法发布方法 大约有 200 300 条记录 并在控制台中出现以下错误 错误 Sys Net WebServiceFailedException Sys Net WebSer
  • 在 JMockit 中模拟被测类的私有方法

    在我的被 测类 CUT 中 一个 ejb 我有一个私有方法 getConnection 我想测试另一种 CUT 方法 但这种方法会提前失败 我尝试了如下所示 但 调用 是错误的 我不想调用该方法 我想存根它 但如何呢 连接 是一个存根 ne
  • 如何在主机之间迁移 Docker 卷?

    码头工人的文档 https docs docker com engine admin volumes volumes 指出卷可以 迁移 我假设这意味着我应该能够将卷从一台主机移动到另一台主机 非常乐意在这一点上得到纠正 但是 同一文档页面没
  • 获取单元 apache poi 的名称

    我有一个 Cell 对象 如何获取该单元格的名称 想要一个函数 例如 String name myCell getName 在Excel中 我已在名称框中对其进行命名 因此我不想获得 B4 我想获得诸如 InterestRate 之类的名称
  • 元素不会重定向到另一个页面并且不可点击

    我创建了一个 Web 组件 在其中声明了创建版权字符串的方法 p Copyright 2020 Krzysztof Kaczy ski a href https www google com Policy terms a p 然后我把这个字
  • 如何为 Mac OS X 编写启动脚本?

    我用java创建了一个jar文件 我想让应用程序在系统启动时自动启动 我发现我必须为此编写一个 shell 脚本 shell 脚本应该是什么样子 我还需要做些什么才能使应用程序在启动时自动启动吗 在 OS X 启动时启动程序的首选方法是创建
  • Altair Ridgeline 不会创建具有名义组的绘图

    我尝试在 Altair 中创建山脊线图 假设我的数据框由 str 和 float 列组成 a object b float64 dtype object 具有像这样的值 a b 0 25 2303 0 1 29 2676 0 2 18 29
  • 问:如何在多个设备上运行单个测试?

    我试图了解如何在多个设备中启动自动化测试 但我无法真正找到我想要的东西 我每个类有大约 5 个测试 我只想在所有连接的设备中执行一个测试 例如登录的端到端测试 我尝试使用连接的设备 但它不仅仅启动我想要的测试 我正在使用 Espresso
  • 如何在量角器测试中单击选择框中的选项?

    我正在使用 Protractor 在 Angular 应用程序中进行端到端测试 我试图单击选择框中的选项 但出现以下错误元素当前不可见 并且可能无法操作 我有这部分html
  • AuthenticationCredentialsNotFoundException:安全上下文不包含身份验证令牌

    我收到以下错误 AuthenticationCredentialsNotFoundException 安全上下文 不包含身份验证令牌 一个可能的原因可能是 没有为此 URL 配置防火墙 我尝试过解决方案 因为我知道当没有为路由配置安全防火墙
  • 在不同的目录中创建共享部分包结构的多个Python模块

    我正在开发一个包含单个应用程序的 Django 项目 该应用程序将在 GPL 下发布 因此我想将其与项目分开开发 使用该应用程序的个人网站 我试图对项目和应用程序使用基于我的域名的包结构 这就是我遇到问题的地方 这是我的文件结构 在适当的情
  • 更改 RichTextBox 的字体而不丢失格式

    如何在不丢失格式的情况下更改richtextbox所有内容的字体 我正在尝试使用 rtb SelectAll rtb SelectionFont new Font fontName 但字体构造函数除了字体类型之外还必须采用字体样式 粗体 斜
  • Handlebars.js 使用 noEscape 选项禁用转义?

    我已经预先转义了所有内容 因此我不想在任何地方使用三重存储 而是希望全局禁用车把转义 快速搜索显示了类似的功能 我可以在我的车把版本中看到该功能 但我不知道如何打开它 拉取请求在这里 https github com wycats hand
  • 查询响应请检查参考手册中的“函数名称解析和解析”部分

    有人可以向我解释一下这有什么问题吗 SELECT COUNT ID FROM tableImSpecifying WHERE VisitorsEmail VarThatHoldsEmailFromA POSTInput 这是我在遵循教程时编
  • 如何在配置文件中将模式设置为开发或生产?

    我们正在迁移到 webpack 4 我们已经有了 dev prod 配置文件 我们开始收到此警告消息 WARNING in configuration The mode option has not been set Set mode op
  • 在程序源文件中使用脚本变量 OMP_NUM_THREADS

    如果我在集群上运行 C 代码 是否可以在我的程序中使用 OMP NUM THREADS 的值 例如 假设我有两个 cpp 文件 main cpp 和 func cpp 其中 func cpp 是使用 OpenMP 并行编写的 我希望能够定义
  • Gitlab-ci:如果 MR 存在,则触发 merge_request 分离管道,如果不存在,则触发源分支管道。这两条管道不应同时运行

    当我创建 MR 时 我想在 MR 合并请求 命令部分查看声纳结果 我的主要期望 如果源分支存在现有 MR 则触发分离管道 不触发功能管道 我只需要那个来检查 MR 命令中的声纳结果 如果源分支没有现有的 MR 则只需触发正常的功能 源 分支
  • Android 交叉编译 libevent

    我一直在尝试将 libevent 交叉编译到 Android 我想知道我做错了什么并获得一些帮助 我尝试构建的版本是 libevent 2 0 19 stable 我开始按照以下描述的步骤进行操作http warpedtimes wordp