首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STLport和Android STLport作为静态加载,Linux/gcc ld报告了“多重定义”。

STLport和Android STLport作为静态加载,Linux/gcc ld报告了“多重定义”。
EN

Stack Overflow用户
提问于 2014-01-18 18:55:28
回答 1查看 1.1K关注 0票数 1

我在Android和STLport上看过很多资料。我有一个复杂的应用程序,java+native代码,它加载STLport (一个c++标准库端口)。最初的代码库在项目的"jni“子jni中的APP_STL := stlport_static中包含了Application.mk。导致ld加载库静态。这在当前的SDK/NDK中导致了许多编译失败。

根据建议,尝试以动态库的形式加载。(在“./jni/Application.mk”中,设置为"APP_STL := stlport_shared"),如果我在"dalvik“虚拟机上禁用checkJNI,我将得到一个干净的编译和加载,并且该应用程序在Android v7a仿真器上运行得完美无缺。

但是,一旦启用了checkJNI,就会在libapplication.so上得到一个"unsatisfiedLinkError“,这看起来可能是动态加载STLport的结果。因此,我希望在静态模式下加载STLport (在成功加载了其他几个库之后,logcat会报告这一点)。在构建过程中,编译是可以的,但是我得到了两个多定义错误,特别是:'vtable for std::bad_exception‘和’std::exception:~exception()‘的多个定义。(我也尝试使用"gnustl_static")。

我正在使用gcc版本4.3.0,并为AndroidNDK-r9c制作3.81版本的命令行模式,以及用于build的小包装器,并使用android-8的构建目标版本"ant“构建.apk文件,等等。

一个比我更熟悉Android的人(我是个彻头彻尾的菜鸟)可能以前见过这种情况。如果是的话,请告知。谢谢。-卢斯

EN

回答 1

Stack Overflow用户

发布于 2014-01-19 10:43:17

肯定可以将stlport_static与NDK r9c结合使用。提到有多个定义错误的对象文件?也许,你在使用一些预先建好的库?也许,gcc的4.3版有问题吗?为什么不使用默认值(gcc 4.8)?

这样,NDK文档显式地鼓励使用共享STL,但是您不能忘记按正确的顺序调用System.loadLibrary()

代码语言:javascript
复制
System.loadLibrary("stlport_shared");
System.loadLibrary("Rusfuture");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21208475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档