Android NDK r5b外部构建和supc++链接问题

2024-05-01

我正在尝试在 Ubuntu 10.10 上使用 r5b NDK 为 Android 平台交叉编译我们的 C++ 代码库(使用 CMake)。编译阶段成功,但是在 .so 的最终链接阶段,有许多对 libsupc++.a 文件(我指定链接到的文件)中的符号的未解析引用。我也尝试过 -lsupc++ 没有区别。

在构建 test-gnustl-1 NDK 测试应用程序时,我尝试尽可能遵循官方 ndk-build 系统生成的命令行。

在arm-linux-androideabi/lib/libsupc++.a 文件上运行arm-linux-androideabi-nm 工具会显示错误输出中引用的定义(T) 符号。

在 libsupc++ 中找不到的符号示例如下:__gxx_personality_v0

这是我的示例链接行和生成的错误示例。

/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -fPIC -Wall -Wextra -Wno-unused -Wno-multichar -fno-rtti -MMD -MP -MF -ffunction-sections -fexceptions -funwind-tables -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Wa,--noexecstack -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -O0 -DDEBUG -D_DEBUG -g --sysroot=/home/user/android-ndk-r5b/platforms/android-9/arch-arm -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--no-undefined,-z,noexecstack -L/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib -L/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib -Wl,-rpath-link=/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib /home/user/android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/libs/armeabi/libstdc++.a -lc -lsupc++ -shared -o ../../lib/Debug/libFoo.so CMakeFiles/Foo.dir/Foo.c.o CMakeFiles/Foo.dir/Bar.cpp.o CMakeFiles/Foo.dir/Baz.cpp.o

`CMakeFiles/Foo.dir/Foo.cpp.o: In function 'myFunc':
/home/user/myroj/src/native/modules/libFoo/Foo.cpp:292: undefined reference to '__cxa_end_cleanup'
CMakeFiles/Foo.dir/Foo.cpp.o:(.ARM.extab.text.myFunc+0x0): undefined reference to '__gxx_personality_v0'
...
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/vector.tcc:350: undefined reference to '__cxa_begin_catch'
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/vector.tcc:357: undefined reference to '__cxa_rethrow'
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/stl_vector.h:1153: undefined reference to 'std::__throw_length_error(char const*)'
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/stl_tree.h:199: undefined reference to 'std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
...

我尝试创建一个简单的 hello-world 应用程序,该应用程序在简单的 .a 文件中使用异常和链接。我遇到了同样的错误,直到我直接链接到 libsupc++.a 库而不是使用“-lsupc++”。然而,同样的技术不适用于较大的项目链接步骤。 NDK 文档还建议在使用外部构建工具时应使用“-lsupc++”。

我不知道如何解决这个链接问题。我已经尝试了尽可能多的方法来重新排序链接线。我知道链接通常是一个变化无常的过程。 任何帮助是极大的赞赏。


事实证明我需要添加-L/home/user/android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/libs/armeabi"到路径并显式链接“/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib/thumb/libsupc++.a“所有包含库都包含在”中--start-group --end-group”条款。

希望这对其他人也有帮助。

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

Android NDK r5b外部构建和supc++链接问题 的相关文章

  • 如何构建/编译 ndk 应用程序?

    嗨 现在我正在下载 ndk 但我不知道如何构建和编译 实际上我是 Android 应用程序的新手 现在我正在使用 linux 并且我不太擅长命令行 embdes embdes laptop cd home embdes projects a
  • 收到警告“NDK 缺少“平台”目录。”没有 NDK [重复]

    这个问题在这里已经有答案了 我有一个仅使用 Android SDK 而不是 NDK 的项目 但每当我使用 gradle 构建时都会收到有关 NDK 的警告 NDK is missing a platforms directory If yo
  • 控制 Android NDK 中的编译器标志?

    我知道我可以使用LOCAL CFLAGS将参数传递给编译器 然而 ndk build正在我的后面插入选项LOCAL CFLAGS 因此它们优先 例如我想指定 Ofast but ndk build adds O2在我自己的标志之后 并且由于
  • 创建产品 SDK:如何使用我正在创建的 SDK 添加本机库 (.so) 和 jar?

    我正在创建一个小部件 我们将提供给开发人员最终用户 它由 jar和一个本机库 so 使用 NDK 构建 JAR 有一个动态库的 JNI 接口 关于如何包含外部内容非常清楚 jar在项目中但没有如何包含依赖的动态库 我如何打包并构建 jar
  • Android Studio 与 ndk 和 googletest

    我正在尝试设置我的 CI 服务器以与 Android Studio 一起使用 我希望通过新的 UI 运行 NDK 的单元测试 我正在使用 GoogleTest 当我从命令行构建时 gcov 可以完美地实现代码覆盖率 我遇到的问题是 UI 中
  • Android:活动对话框/对话框意外消失

    我有一个申请TabActivity每次从引擎 NDK C 代码 收到回调时 我都会在其中显示一个对话框 我确保当应用程序处于恢复状态时显示对话框 收到引擎的回调后 我启动NetworkDownDialog活动 但这会导致对话框停留一秒钟然后
  • (二进制、NDK)C 应用程序与 Java 应用程序的反编译(Dalvik 字节码)

    Well 由于我对重新设计很感兴趣 到目前为止我在 Android 重新设计上花费了大量时间 尽管如此 我还是遇到了编译二进制 C 代码 NDK 的问题 并且我知道将其反编译回 C C 比将 DEX 文件反编译回或多或少要困难得多 以及Ja
  • Android Studio 14 原生开发 + CrystaX NDK

    我正在尝试将一个巨大的跨平台 C 11 iOS Android 应用程序项目迁移到 Android Studio 14 我使用 CrystaX NDK 进行 boost 和 C 14 他们网站的博客上有官方 Android Studio C
  • Android NDK 链接问题

    我用 NDK 编译了 Sox 等 所以 我拥有所有 Android 友好的共享库 我制造了一个简单的测试文件 http pastebin com rniwQ7Gz它调用 sox 函数 NDK 构建告诉我 undefined referenc
  • 如何使用 cmake -v 调用来帮助查找链接器错误

    我从 android studio NDK 构建中收到以下错误 Error error linker command failed with exit code 1 use v to see invocation 如何按照错误提示 使用 v
  • Android NDK:从 JNI C 类调用 java 方法

    我有 JNI 方法 我试图在其中调用 Java 方法 这是我的 JNI 代码 void DummySink afterGettingFrame unsigned frameSize unsigned numTruncatedBytes st
  • Readelf 报告程序是共享库而不是可执行文件

    使用独立的 Android NDK r10e 工具链 使用 toolchain x86 clang3 6 开关构建 出现这种奇怪的行为 交叉编译的环境变量已设置在运行makefile之前 SYSROOT指向Android工具链位置 CXX等
  • Boost C++ 和 Android 3

    我尝试用谷歌和SO搜索 到目前为止 我只能找到相互矛盾的信息 如果 Boost 和 Android 结合太难 也许有替代品 我对 smart ptr 线程 函数 lexical cast string algo 和容器特别感兴趣 任何意见都
  • 如何在Eclipse中配置Tesseract进行Android开发?

    我已经从事 Android 工作 6 个月了 至此我对Android开发有了基本的了解 现在我想使用 Tesseract 开发一个 OCR Android 应用程序 为此 我从 Tesseract 下载了 android ndk r6b t
  • 如何在Android项目中使用libffmpeg.so?

    我正在尝试在 Android 中创建一个屏幕录制应用程序 为此 我使用 FFmpeg 我已经创建了 libffmpeg so 文件 现在我想在 Android 项目中使用相同的方法来调用它的本机函数 我怎样才能做到这一点 本教程提供了有关此
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN
  • 使用 Android NDK 将文件写入 SD 卡以外的位置?

    除了SD卡之外 还有其他方法可以将文件写入其他位置吗 我在文件系统上尝试了许多不同的路径 但 fopen 总是返回 NULL 除了我在 sdcard 内写入 读取的任何文件 还有其他相当于
  • 使用 NDK 构建具有适用于 Android 的 cmake 构建文件的 C++ 项目

    我必须构建 2 个独立的 C 项目 它们具有针对不同平台的 Cmake 构建文件设置 我想使用 NDK 为 Android 构建它们 以便我可以将它们用作 Android Studio 中的预构建库 如何使用 NDK 为 Android 构
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于
  • 不同 Android 设备上 box2D 中出现奇怪的“口吃”

    我正在用 C 同时开发引擎和游戏 并使用 box2D 作为物理后端 我正在不同的 Android 设备上进行测试 在三分之二的设备上 游戏运行良好 物理效果也很好 然而 在我的 Galaxy Tab 10 1 上 我偶尔会遇到某种 口吃 的

随机推荐

  • 使用android应用程序的http post方法发送json对象

    我正在尝试将 JSON 对象发送到我的 php web 服务 我已经提到了这个网址 http www josecgomez com 2010 04 30 android accessing restfull web services usi
  • 根据其他列设置列的值

    我有一个数据框 如下所示 ID Score New ID New Score 123 5 456 456 1 789 789 0 123 我想为 New ID 列提供相同的分数 只是顺序不同 期望的结果 ID Score New ID Ne
  • 颤动中的多个依赖下拉菜单

    我正在尝试在颤动上构建多个依赖的下拉菜单 第二个依赖于第一个 这是我实现的下拉列表的代码 Container child new DropdownButton
  • C# CreateSymbolicLink 不遵循共享访问

    我不确定这只是 C 问题还是 Windows 限制 我有一台运行我的程序的服务器 它在共享文件夹中创建符号链接 我可以通过此链接从具有正常磁盘路径和共享路径的服务器进行访问 如果我尝试与其他电脑访问同一共享 我将无法访问链接的文件 我确实可
  • Pandas如何按列按间隔分割数据框

    我有一个巨大的数据框 其中有一个名为的日期时间类型列dt 数据框排序基于dt已经 我想根据以下内容将数据帧拆分为多个数据帧dt 每个数据帧包含行1 hr range Split dt text 0 20160811 11 05 a 1 20
  • IE 下的 Http 请求速度变慢

    在我的 javascript 应用程序中工作时 我注意到使用 IE 11 时 相同的 ajax 请求时间最多延长 10 倍 响应大小完全相同 12 6KB 我看到的唯一区别是 IE 添加 Pragma no cache 不是铬 Chrome
  • 在 docker 容器内运行 vite 开发服务器

    我有一个 Vue cli 应用程序 我正在尝试将其转换为 vite 我正在使用 Docker 来运行服务器 我看了几个教程 并让 vite 在开发模式下运行 没有错误 但是 浏览器无法访问该端口 也就是说 当我在 macbook 的命令行上
  • Git - 如何压缩对被忽略文件的更改而不丢失这些更改?

    我想使用 git 保存应用程序随时间使用的实际依赖项的历史记录 其保真度比我从包管理器获得的保真度更高 我正在使用这些分支 master 仅源代码 依赖于 gitignore 构建 源代码和依赖项 build TIMESTAMP 用于强制提
  • 从 Silverlight OOB 访问注册表

    我可以访问吗Registry from Silverlight Out Of Browser 我只想搜索 读取键并获取键值对 这可能吗 或者 有没有其他方法 例如运行powershell script 或启动其他一些 exe 来了解这些值
  • Python @property 与方法性能 - 使用哪一个?

    我编写了一些使用对象属性的代码 class Foo def init self self bar baz myFoo Foo print myFoo bar 现在我想做一些花哨的计算来返回bar 我可以用 property使方法充当属性ba
  • Ionic 4无法导入自定义组件不是已知元素

    我是 Ionic 新手 我想创建一个带有可扩展项目的自定义列表视图 如下链接 https www joshmorony com creating an accordion list in ionic https www joshmorony
  • 相当于使用 for-loop 代替 do-while-loop

    我想知道 c 中等效的 for 循环或任何其他循环组合是什么 而不是使用 do while 循环 任何类型的循环都可以通过无限 永远 循环和条件循环的组合来构造break陈述 例如 要转换 do
  • 在 REP MOVSW 之前 PUSH CS / POP DS 的目的是什么?

    为什么在下面的代码中我们压入代码段 PUSH CS 然后将其弹出到数据段 POP DS 我将这些行明确指定为 line1 和 line2 请告诉我 MOVSW 在这里是如何工作的 IF HIGHMEMORY PUSH DS MOV BX D
  • 为什么在可变字典上调用 setValue:forKeyPath 不会抛出未知键路径的异常?

    我有以下代码 NSMutableDictionary dict NSMutableDictionary dictionary defs setObject NSNumber numberWithInt 100 forKey test1 te
  • 无法获取 https://gerrit.googlesource.com/git-repo/clone.bundle

    我尝试按照以下说明创建一个 git 存储库 source android com source downloading html installing repo 但是当我尝试在工作目录中初始化存储库时 使用 Ubuntu 出现以下错误 wo
  • “publish_actions”扩展权限是否可用于测试?

    我一直在尝试使用 publish actions 扩展权限来测试分数和成就 但是当我添加它时 它不会显示在 权限请求 页面中 就好像它被忽略了一样 我尝试了几种不同的方法 loginUrl facebook gt getLoginUrl a
  • 如何正确设置 100% DIV 高度以匹配文档/窗口高度?

    我有一个包装器 位于中心位置 并带有 y 重复的背景图像 div some content div wrapper width 900px margin 0 auto 0 auto background image url image jp
  • 删除并加入同一个表

    是否可以执行连接同一个表的删除查询语句 我尝试过各种连接 内部 左侧 但没有运气 mysql 返回错误 我需要的例子 DELETE a FROM t1 AS a INNER JOIN t1 AS b USING some field b W
  • Docker容器总是显示ssl连接错误

    我正在开始使用 docker compose 并一直在研究简单的演示 Flask 应用程序 问题是 我在一个组织内部运行这个程序 该组织以左右抛出 SSL 错误的方式拦截所有通信 他们为我们提供了需要安装的三个根证书 我通常已经让这些证书在
  • Android NDK r5b外部构建和supc++链接问题

    我正在尝试在 Ubuntu 10 10 上使用 r5b NDK 为 Android 平台交叉编译我们的 C 代码库 使用 CMake 编译阶段成功 但是在 so 的最终链接阶段 有许多对 libsupc a 文件 我指定链接到的文件 中的符