gpt4 book ai didi

android - 未定义的 lame 解码函数

转载 作者:行者123 更新时间:2023-11-30 01:21:01 29 4
gpt4 key购买 nike

我正在尝试将 MP3 读写功能添加到我的 Android 应用程序中。我使用 lame4android 应用程序作为起点。对文件进行编码对我有用,但我在使用解码函数时遇到了问题——我得到了对解码函数的 undefined reference 。

以下是我的 wrapper.c 的摘录:

#include "libmp3lame/lame.h"
#include "jni.h"

lame_t lame;

jint Java_com_intonia_dandy_WavStream_initEncoder(JNIEnv *env,
jobject jobj,
jint in_num_channels,
jint in_samplerate)
{
lame = lame_init();
...
return lame_init_params(lame);
}

hip_t hip;

jint Java_com_intonia_dandy_WavStream_initDecoder(JNIEnv *env, jobject jobj)
{
hip = hip_decode_init();
return hip != 0;
}

下面是来自 lame.h 的声明:

lame_global_flags * CDECL lame_init(void);

typedef hip_global_flags *hip_t;
hip_t CDECL hip_decode_init(void);

我收到一条错误消息:

C:/ACode/dandy/src/main/jni/./wrapper.c:62: undefined reference to `hip_decode_init`

我还得到了对 hip_decodehip_decode_exit 的 undefined reference 。但是 lame_initlame_init_paramslame_encode_bufferlame_encode_flush 不会产生任何错误。我在使用命令行运行 ndk-build 时遇到了这些错误,当我让 Android Studio 管理编译时我也遇到了同样的错误。

lame_* 函数与 hip_decode_* 函数有何不同?我应该使用已弃用的 lame_decode_* 吗?

编辑:我正在查看 ndk-build 命令的输出。 .c 文件在编译时列在控制台上。 hip_decode_initjni/libmp3lame/mpglib_interface.c 中定义,但是 mpglib_interface 没有被编译,即使它在 jni/中列出安卓.mk。为什么不呢???

最佳答案

事实证明,分发的 LAME 库没有启用解码。为了让它工作,我必须执行以下操作:

  1. #define HAVE_MPGLIB 1添加到mpglib_interface.c

  2. 从 LAME 发行版的 mpglib 目录中复制所有 .c 和 .h 文件。

  3. 编辑 Android.mk 以包含来自 mpglib 的 .c 文件。

编辑:不是修改 mpglib_interface.c 来定义 HAVE_MPGLIB,最好设置编译标志。

使用 Android Studio 2+,build.gradle 应该包含

android {
defaultConfig {
ndk {
moduleName "libmp3lame"
cFlags "-DSTDC_HEADERS -DHAVE_MPGLIB"
}
}
}

或者在 Android.mk 中:

LOCAL_CFLAGS = -DSTDC_HEADERS -DHAVE_MPGLIB

关于android - 未定义的 lame 解码函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37102769/

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