Статический Android против общей библиотеки - PullRequest
0 голосов
/ 03 августа 2011

У меня есть проект 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.Есть идеи, почему это так?Разве мы не можем иметь две общие библиотеки одновременно в проекте?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2013

LOCAL_PATH: = $ (вызов 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_STARIES:

include $ (BUILD_SHARED_LIBRARY)

"Lib2" - статическая библиотека, вам следует использовать LOCAL_STATIC_LIBRARIES

0 голосов
/ 09 августа 2011

Как насчет этого?

static
{
    System.loadLibrary("Lib2");
    System.loadLibrary("Lib1");
}

Ваш apk должен включать libLib2.so как libLib1.so.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...