可以从另一个共享库中共享库加载和调用函数吗?
我有共享库libDsmTestLib.so,它使用另一个共享库libDsmShared.so和libPINDsmShared.so
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := DsmTestLib
LOCAL_SRC_FILES := DSM_Library.cpp
LOCAL_LDLIBS := -lDsmShared
LOCAL_LDLIBS += -lPINDsmShared
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
当我创建libDsmTestLib.so并想在我的android java应用程序中使用它时,如下所示:
package com.dsm;
import android.app.Activity;
import android.os.Bundle;
public class dsmTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
static {
try {
System.loadLibrary("DsmTestLib");
}
catch( UnsatisfiedLinkError e ) {
System.err.println("Native code library failed to load.\n" + e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在catch块中我得到错误
无法加载库:link_image [1962]:33无法为'libDsmTestLib.so'加载所需的库'libDsmShared.so'(load_library [1104]:找不到库'libDsmShared.so')
LoadLibrary函数无法找到库libDsmShared.so使用我的主库libDsmTestLib.so,谁能告诉为什么?我该怎么做才能解决这个问题?
我有一个静态库(.so用C++编写),我想从我的Java android应用程序中使用它,因为我创建了.cpp和.h文件,我在其中调用了以前创建的库中的函数.
我用这种方式找到了解决方案 - 明确加载库:
static {
try {
System.loadLibrary("DsmShared");
System.loadLibrary("DsmTestLib");
}
catch( UnsatisfiedLinkError e ) {
System.err.println("Native code library failed to load.\n" + e);
}
}
Run Code Online (Sandbox Code Playgroud)
Vik*_*yan -3
Android 动态链接器有一个错误,导致其无法工作,但我相信在 1.6 中已修复。如果您使用 NDK,请在定义 libA 模块时使用“LOCAL_SHARED_LIBRARIES := libB libC”。这假设 libB 和 libC 也是使用 NDK 生成的 NDK 模块。
In case libB.so and libC.so are not generated with the NDK, you should do
the following:
Run Code Online (Sandbox Code Playgroud)
在 libA 模块定义中,使用 LOCAL_LDLIBS += /full/path/to/libB.so /full/path/to/libC.so 这可确保在 libA.so 中生成正确的符号导出
在重建 .apk 之前,手动将 libB.so 和 libC.so 复制到 $APP_PROJECT/libs/armeabi,这可确保包管理器在安装时将其复制到 /data/data//lib 。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := DsmTestLib
LOCAL_SRC_FILES := DSM_Library.cpp
#LOCAL_SHARED_LIBRARIES := DsmShared
#LOCAL_SHARED_LIBRARIES += PINDsmShared
# Set local libs with full path.
LOCAL_LDLIBS := C:/cygwin/home/android-ndk-r5b/samples/testingDsm/lib/libDsmShared.so
LOCAL_LDLIBS += C:/cygwin/home/android-ndk-r5b/samples/testingDsm/lib/libPINDsmShared.so
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
无法加载库:link_image[1962]:33无法加载“libDsmTestLib.so”所需的库“C:/cygwin/home/android-ndk-r5b/samples/testingDsm/lib/libDsmShared.so”(load_library[1104] : 库 'C:/cygwin/home/android-ndk-r5b/samples/testingDsm/lib/libDsmShared.so' 未找到)
发生了,但是当我检查 C:/cygwin/home/android-ndk-r5b/samples/testingDsm/lib/libDsmShared.so 这个路径时,我发现该库存在于那里......这是怎么回事?
| 归档时间: |
|
| 查看次数: |
18887 次 |
| 最近记录: |