Я использую 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 *