我看过很多关于 Android NDK 和 STLport 的资料。我有复杂的应用程序,java+native 代码,它加载 STLport(一个 c++ 标准库端口)。原始代码库在项目的“jni”子目录中的 Application.mk 中有“APP_STL := stlport_static”。导致 ld 加载静态库。在当前的 SDK/NDK 中,这导致了许多编译失败。
根据建议,尝试作为动态库加载。(在“../jni/Application.mk”中,设置“APP_STL := stlport_shared”)有了这个,我得到一个干净的编译和加载,如果我禁用 checkJNI ,应用程序可以在 Android armeabi-v7a 模拟器上完美运行在“dalvik”虚拟机上。
但是一旦我启用 checkJNI,我会在 libapplication.so 上得到一个“unsatisfiedLinkError”,这看起来可能是由于 STLport 被动态加载造成的。所以,我想在静态模式下加载 STLport(logcat 在其他几个库成功加载后报告这个)。在构建过程中,编译是可以的,但是我得到了两个多重定义错误,特别是:“'vtable for std::bad_exception' 的多重定义”和 'std::exception::~exception()'。(我也尝试过使用“gnustl_static”)。
我正在使用 gcc 4.3.0 版并制作 3.81 版、命令行模式和围绕 build-ndk 的小型包装器,用于 android ndk-r9c,构建目标版本为 android-8,“ant”来构建 .apk 文件, 等等。
比我更熟悉 Android 的人(我是一个完全的菜鸟)可能以前见过这个。如果有,请指教。谢谢。- 罗斯