我尝试在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
来自哪里,我该如何获得?
答案 0 :(得分:1)
您的库是根据您提供的不同版本的libc ++构建的。 ZNSt8ios_base4InitD1Ev
是r11之前的名称。从那时起它就是_ZNSt6__ndk18ios_base4InitD1Ev
。
或者,您的库是针对gnustl或stlport构建的,但是提供了libc ++。