我在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的人(我是个彻头彻尾的菜鸟)可能以前见过这种情况。如果是的话,请告知。谢谢。-卢斯
发布于 2014-01-19 10:43:17
肯定可以将stlport_static与NDK r9c结合使用。提到有多个定义错误的对象文件?也许,你在使用一些预先建好的库?也许,gcc的4.3版有问题吗?为什么不使用默认值(gcc 4.8)?
这样,NDK文档显式地鼓励使用共享STL,但是您不能忘记按正确的顺序调用System.loadLibrary():
System.loadLibrary("stlport_shared");
System.loadLibrary("Rusfuture");https://stackoverflow.com/questions/21208475
复制相似问题