gpt4 book ai didi

android - STLport 和 Android NDK - STLport 作为静态加载,Linux/gcc ld 报告 "multiple definitions"

转载 作者:行者123 更新时间:2023-11-30 03:09:34 24 4
gpt4 key购买 nike

我浏览了很多关于 Android NDK 和 STLport 的资料。我有复杂的应用程序,java+ native 代码,它加载 STLport(一个 c++ 标准库端口)。原始代码库在项目“jni”子目录的 Application.mk 中有“APP_STL := STLport_static”。导致 ld 加载静态库。在当前的 SDK/NDK 中,这导致了许多编译失败。

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

但是一旦启用 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 的人(我是一个完全的菜鸟)可能以前见过这个。如果是这样,请指教。谢谢。 - 俄罗斯

最佳答案

绝对可以将 STLport_static 与 NDK r9c 一起使用。哪些目标文件提到了多重定义错误?也许,您正在使用一些预构建的库?也许,gcc 4.3 版有问题?为什么不使用默认值 (gcc 4.8)?

由此,NDK document明确鼓励使用共享 STL,但您一定不要忘记调用 System.loadLibrary()顺序正确:

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

关于android - STLport 和 Android NDK - STLport 作为静态加载,Linux/gcc ld 报告 "multiple definitions",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21208475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com