gpt4 book ai didi

android - 使用 dlclose(Android NDK) 从应用程序中删除 native 库的实例

转载 作者:行者123 更新时间:2023-12-04 22:51:12 24 4
gpt4 key购买 nike

我已编译FFmpeg图书馆使用 NDK并用它来修剪视频并从我的应用程序中的视频中获取缩略图,所以基本上我有 ffmpeg.sovideo-trimmer.so库启动并运行。

然而问题很奇怪,修剪或 getThumbnail 操作成功但只有一次,即第一次,第二次操作失败。但是第三次​​成功了,我用谷歌搜索了两个与我的问题相关的类似帖子

POST 1:

POST 2:

有趣的是,他们提出了相同的解决方案,我无法解决 C 中的幼稚问题编程语言。

这是我所做的

void Java_com_example_demo_natives_LibraryLoader_loadTrimmerLibrary(JNIEnv* env, jclass class, jstring libffmpeg_path, jstring inputFile, jstring outFile,
jstring startTime, jstring length)
{
const char* path;
void* handle;
int *(*Java_com_example_demo_natives_VideoTrimmer_trim)(JNIEnv *, jclass, jstring, jstring, jstring, jstring);

path = (*env)->GetStringUTFChars(env, libffmpeg_path, 0);

handle = dlopen(path, RTLD_LAZY);

Java_com_example_demo_natives_VideoTrimmer_trim = dlsym(handle, "Java_com_example_demo_natives_VideoTrimmer_trim");
(*Java_com_example_demo_natives_VideoTrimmer_trim)(env, class, inputFile, outFile, startTime, length);

(*env)->ReleaseStringUTFChars(env, libffmpeg_path, path);

dlclose(handle);
}

尽管调用 dlclose库实例仍然存在于内存中,我在这里做错了什么?

我知道库实例仍然存在,因为当我在其他 Activity 中再次加载库时,错误消息显示库已经存在于 CL 中。

我想从内存中删除该库的实例,请帮助...

最佳答案

尝试移动“ReleaseString...”的位置

它应该在“dlopen”之后

它应该在调用其他共享库之前...

(*env)->GetStringUTFChars
dlopen
(*env)->ReleaseStringUTFChars
make the main call
dlclose

关于android - 使用 dlclose(Android NDK) 从应用程序中删除 native 库的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12263739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com