【发布时间】:2011-08-03 09:43:36
【问题描述】:
我有一个 android 项目,它由一个 java 文件和两个 ndk 库一个 C++ 和其他 JNI 组成。 JNI 共享库加载 C++ 静态库并调用其中一个方法。这是所有文件..
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Lib2
LOCAL_SRC_FILES := Lib2.cpp
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := Lib1
LOCAL_SRC_FILES := Lib1.cpp
LOCAL_SHARED_LIBRARIES := Lib2
include $(BUILD_SHARED_LIBRARY)
Lib1.h
#include <jni.h>
extern "C"
{
JNIEXPORT void JNICALL Java_mine_twocpplibtest_TwocpplibtestActivity _TestMethod(JNIEnv * env, jobject obj);
};
Lib1.cpp
#include <jni.h>
#include "Lib1.h"
#include "Lib2.h"
using namespace Lib2ns;
JNIEXPORT void JNICALL Java_mine_twocpplibtest_TwocpplibtestActivity_TestMethod(JNIEnv * env, jobject obj)
{
Lib2::TestChanged();
}
Lib2.h
#ifndef Lib2_HEADER
#define Lib2_HEADER
using namespace std;
namespace Lib2ns
{
class Lib2
{
public:
static void TestChanged();
};
}
#endif
Lib2.cpp
#include "Lib2.h"
using namespace Lib2ns;
void Lib2::TestChanged()
{
}
这是我加载 Lib1 的活动
public class TwocpplibtestActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
static
{
System.loadLibrary("Lib1");
}
}
当我将Lib2 定义为include $(BUILD_STATIC_LIBRARY) 时,问题出现在Android.mk 文件中,一切正常,但是当我将Lib2 定义为include $(BUILD_SHARED_LIBRARY) 时,我的活动在尝试加载Lib1 时崩溃。任何想法为什么会这样?我们不能在一个项目中同时拥有两个共享库吗?
【问题讨论】:
标签: android android-ndk