STLport和Android NDK - STLport作为静态加载,Linux / gcc ld报告"多个定义"

时间:2014-01-18 18:55:29

标签: android android-ndk stlport

我在Android NDK和STLport上看过很多内容。我有复杂的应用程序,java +本机代码,它加载STLport(一个c ++标准库端口)。原始代码库在项目的“jni”子目录中的Application.mk中有“APP_STL:= stlport_static”。导致ld加载lib静态。在当前的SDK / NDK中,这导致了许多编译失败。

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

但是一旦我启用了checkJNI,我就会在libapplication.so上得到一个“unsatisfiedLinkError”,看起来它可能是由STLport动态加载造成的。所以,我想在静态模式下加载STLport(logcat在成功加载其他几个lib之后报告)。在构建期间,编译是可以的,但我得到两个多重定义错误,特别是:“std :: bad_exception'的'vtable的多重定义'和'std :: exception :: ~exception()'的多重定义。 (我也尝试过使用“gnustl_static”)。

我正在使用gcc版本4.3.0并制作版本3.81,命令行模式和build-ndk的小包装器,用于android ndk-r9c,具有构建目标版本的android-8,“ant”来构建.apk文件,等等。

比我更熟悉Android(我是一个完整的菜鸟)的人可能以前见过这个。如果是这样,请指教。感谢名单。 - 罗斯

1 个答案:

答案 0 :(得分:1)

使用NDK r9c绝对可以使用 stlport_static 多个定义错误提到了哪些目标文件?也许,你正在使用一些预建的库?也许,gcc版本4.3有问题吗?为什么不使用默认值(gcc 4.8)?

有了这个,NDK document明确鼓励使用共享STL,但你不能忘记按正确顺序调用System.loadLibrary()

System.loadLibrary("stlport_shared");
System.loadLibrary("Rusfuture");