Android链接问题

时间:2017-08-02 16:02:21

标签: android c++ android-ndk

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

机器人-API = 21 机器人-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来自哪里,我该如何获得?

1 个答案:

答案 0 :(得分:1)

您的库是根据您提供的不同版本的libc ++构建的。 ZNSt8ios_base4InitD1Ev是r11之前的名称。从那时起它就是_ZNSt6__ndk18ios_base4InitD1Ev

或者,您的库是针对gnustl或stlport构建的,但是提供了libc ++。