我正在尝试创建一个链接到另一个共享库的共享库.
这是我的主要模块Android.mk:
TOP_LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
LOCAL_PATH := $(TOP_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_CPP_EXTENSION := cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/ $(LOCAL_PATH)/lib/include
LOCAL_MODULE := SightCore-jni
LOCAL_SRC_FILES := SightDemo.cpp SightCore-jni.cpp
LOCAL_SHARED_LIBRARIES := SightAPI
LOCAL_LDLIBS = -llog
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
我还有./lib目录中的预构建共享库及其自己的Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := SightAPI
LOCAL_SRC_FILES := libSightAPI.so
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
SightCore-jni.cpp源文件是共享库的jni接口,使用该命令加载
System.loadLibrary("SightCore-jni");
Run Code Online (Sandbox Code Playgroud)
在ndk-build过程中,我没有得到编译或链接错误.当我尝试运行应用程序并访问其中一个本机方法时,我得到了UnsatsfiedLinkError.我注意到如果在我的jni代码中禁用对SightAPI的引用并将拼写错误输入LOCAL_STATIC_LIBRARIES:= SightAPI行,则构建成功并且没有UnsatisfiedLinkError.
这意味着我拥有的jni代码很好(我确实它确定没问题......)
所以观察结果如下:
如果我用预构建的共享库编译共享库,我会得到一个损坏的 .so文件.
如果我编译相同的ndk项目而不链接到预构建的共享库,那么从java端加载共享库没有问题.
如果可以,请帮帮我.
提前致谢, …
我工作的公司遭遇了严重的服务器故障.在此失败期间,SVN存储库丢失.但仍有希望!我们有一个旧的备份库,我已经设法使用VisualSVN成功恢复.
我现在面临的问题是我无法更新/提交故障前检出文件夹.出现此问题的原因是:例如:本地文件夹的版本号为2361,而存储库本身的版本号为2290,较旧.
有办法解决这个问题吗?我可以更改本地副本或服务器副本上的修订号吗?
几点:
感谢您的时间,
伊达
我有一个JNI问题,我希望有人可以帮助我.
我正在尝试从本机线程调用名为LUSOutputJNI的Java类的构造函数.
它一直在这个特定类的FindClass(...)上失败.
这是代码:
LOGE("1");
JNIEnv *env = NULL;
LOGE("2");
int res = -1;
res = g_vm->AttachCurrentThread(&env, NULL);
if(env == NULL)
{
LOGE("env is NULL, AttachCurrentThread failed");;
}
if(res >= 0)
LOGE("AttachCurrentThread was successful");
jclass clazz = NULL;
jmethodID cid;
jclass clazzESEngine;
jmethodID callbackid;
jobject jCoreOut;
static jfieldID fid_ActionState = NULL;
static jfieldID fid_nSpeed = NULL;
static jfieldID fid_nType = NULL;
static jfieldID fid_nInProcess = NULL;
static jfieldID fid_nX = NULL;
static jfieldID fid_nY = NULL;
LOGE("3");
static const char* …Run Code Online (Sandbox Code Playgroud)