安卓链接问题

Android link issue

本文关键字:问题 链接      更新时间:2023-10-16

我尝试在Android上编译C++代码。

安卓-API=21 android-ndk=r14b

我收到此错误:

8-02 17:33:32.926 30669-30669/com.example.user.mod2 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.user.mod2, PID: 30669
    java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZNSt8ios_base4InitD1Ev" referenced by "/data/app/com.example.vkhadir.mod2-1/lib/arm/libcustom.so"...
        at java.lang.Runtime.loadLibrary(Runtime.java:372)
        at java.lang.System.loadLibrary(System.java:1076)
        at com.example.user.mod2.MainActivity.load(MainActivity.java:65)
        at com.example.user.mod2.MainActivity.loadlibs(MainActivity.java:37)
        at com.example.user.mod2.MainActivity.onCreate(MainActivity.java:30)
        at android.app.Activity.performCreate(Activity.java:6272)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
        at android.app.ActivityThread.access$900(ActivityThread.java:157)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5551)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

问题来自ZNSt8ios_base4InitD1Ev(又名ios_base::Init::~Init(,当我在android独立工具链中检查libc++_shared.so文件时,nm -D只找到_ZNSt6__ndk18ios_base4InitD1Ev

ZNSt8ios_base4InitD1Ev从哪里来,我怎样才能得到它?

您的库是针对与您发布的版本不同的 libc++ 版本构建的。ZNSt8ios_base4InitD1Ev是 R11 之前的名称。从那以后就_ZNSt6__ndk18ios_base4InitD1Ev了。

或者,你的库是针对 gnustl 或 stlport 构建的,但附带了 libc++。