Ошибка компиляции C ++ под Android Cmake - PullRequest
0 голосов
/ 08 июня 2018

Я использую android studio для компиляции кода на c ++, и моя версия ndk - android-ndk-r12b.В моем проекте я определил две функции в mp4muxer.h:

void Engine_create(const char *file, uint32_t flag);

void Engine_readFile(const char *file);

и реализовал в mp4muxer.cpp следующим образом:

void Engine_readFile(const char *file, uint32_t flag) {


    MP4FileHandle handle = MP4Read(file);
    if (handle == MP4_INVALID_FILE_HANDLE) {
        __android_log_print(ANDROID_LOG_ERROR, TAG, "Create mp4 file failed invalid handle!");
        return;
    }
    MP4TrackId trackId = MP4FindTrackId(handle, 0, MP4_TEXT_TRACK_TYPE, 0);

    __android_log_print(ANDROID_LOG_ERROR, TAG, "Read trackId: %d", trackId);
    if (trackId == MP4_INVALID_TRACK_ID) {
        __android_log_print(ANDROID_LOG_ERROR, TAG, "Create mp4 file using mp4v2 library! invalid trackId: %d", trackId);
        return;
    }

    uint32_t count;
    uint8_t* data = (uint8_t * ) malloc((size_t)(10 * sizeof(uint8_t)));
    uint32_t sid = 1;
    while (MP4ReadSample(handle, trackId, sid++, &data, &count)) {

       int i;
       for (i = 0; i < 5; i++) {
           __android_log_print(ANDROID_LOG_ERROR, TAG, "value: %d", data[i]);
       }

    }

    MP4Close(handle);
}

void Engine_create(const char* file) {

    MP4FileHandle handle = MP4Create(file);
    if (handle == MP4_INVALID_FILE_HANDLE) {
        __android_log_print(ANDROID_LOG_ERROR, TAG, "Create mp4 file failed invalid handle!");
        return;
    }
    MP4TrackId trackId = MP4AddTextTrack(handle, 3);

    __android_log_print(ANDROID_LOG_ERROR, TAG, "Create trackId: %d", trackId);
    if (trackId == MP4_INVALID_TRACK_ID) {
        __android_log_print(ANDROID_LOG_ERROR, TAG, "Create mp4 file using mp4v2 library! invalid trackId: %d", trackId);
        return;
    }

    uint32_t count = 50;
    uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    while (count-- > 0) {

        MP4WriteSample(handle, trackId, data, 10);

    }

    MP4Close(handle);

}

и вызвал функции:

include <jni.h>

#include "../mp4muxer.h"

#ifdef __cplusplus
extern "C" {
#endif

#include "../muxing.h"
#ifdef __cplusplus
}
#endif





static void MuxerEngine_engine(JNIEnv *env, jobject clazz, jstring fileName) {

    jboolean isCopy;
//    const char * cstr = env->GetStringUTFChars(fileName, &isCopy);
    const char * cstr = NULL;
    Engine_create(cstr, 0);
    env->ReleaseStringUTFChars(fileName, cstr);
}


static void MuxerEngine_read(JNIEnv *env, jobject clazz, jstring fileName) {

    jboolean isCopy;
    const char * cstr = env->GetStringUTFChars(fileName, &isCopy);
    Engine_readFile(cstr);
    env->ReleaseStringUTFChars(fileName, cstr);
}

но когда я скомпилировал, компилятор сказал:

ошибка: неопределенная ссылка на 'Engine_create (char const *, unsigned int)' ошибка: неопределенная ссылка на 'Engine_readFile (char const *)'

что меня смутило: я определил функцию: Engine_create(const char*, unsigned int), но получил информацию об ошибке:

Engine_create (char const *, unsigned int), параметр constchar * но не char cont *

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