我正在尝试为我的安卓应用程序添加MP3读写功能。我正在使用lame4android应用程序作为起点。对文件进行编码对我来说是可行的,但是我在使用解码函数时遇到了问题--我得到了对解码函数的未定义引用。
下面是我的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_decode和hip_decode_exit的未定义引用。但lame_init、lame_init_params、lame_encode_buffer和lame_encode_flush不会生成任何错误。我使用命令行运行ndk-build时得到了这些错误,当我让Android Studio管理编译时也得到了同样的错误。
lame_*函数与hip_decode_*函数有何不同?我应该使用过时的lame_decode_*吗?
编辑:我正在查看ndk-build命令的输出。.c文件在编译时会在控制台上列出。hip_decode_init是在jni/libmp3lame/mpglib_interface.c中定义的,但是即使在jni/Android.mk中列出了mpglib_interface,它也没有被编译。有何不可?
发布于 2016-05-09 04:29:12
事实证明,作为分布式的LAME库没有启用解码。为了让它正常工作,我必须执行以下操作:
#define HAVE_MPGLIB 1添加到LAME 编辑:与其修改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_MPGLIBhttps://stackoverflow.com/questions/37102769
复制相似问题