У меня есть проект 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");
}
}
Проблема в Android.mk
файле, когда я определяю Lib2
как include $(BUILD_STATIC_LIBRARY)
все работает нормально, но когда я определяю Lib2
как include $(BUILD_SHARED_LIBRARY)
моя активность падает при попытке загрузить Lib1
.Есть идеи, почему это так?Разве мы не можем иметь две общие библиотеки одновременно в проекте?