错误发生在链接阶段。确保链接目录已添加到-L编译器的参数中。
-L/directory/of/your/lib
-l并使用选项指定库。
因此,请确保在-L/directory/of/your/lib -lrubberband构建时为您的编译器设置ffmpeg了rubberband支持选项。
如果你没有使用pkg-config添加库。您可以--extra-ldflags在构建前配置 ffmpeg 时使用添加选项。
./configure \
# some configure options
--extra-ldflags="-L/directory/of/your/lib -lrubberband" \
# more configure options
如果您使用pkg-config查找库。只需将library.pc目录添加到PKG_CONFIG_PATH,然后让构建系统完成剩下的工作。
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/directory/to/your/rubberband.pc
更新
最后确保你链接到你的库的相同架构。
$ arm-linux-androideabi-readelf -h librubberband.a |grep 'Class\|Machine
对于armeabi-v7a,它应该是ELF32和ARM。
更新
我已经从https://bitbucket.org/breakfastquay/rubberband克隆了橡皮筋的来源
并发现函数调用rubberband_set_pitch_scale定义在src/rubberband-c.cpp,该文件不包含在Android.mk为 Android 构建时(为什么?)。
所以你必须添加这个文件来构建。
RUBBERBAND_SRC_FILES = ... \
$(RUBBERBAND_SRC_PATH)/rubberband-c.cpp
构建完成后,您需要创建如下目录结构
.
├── include
│ └── rubberband
│ ├── RubberBandStretcher.h
│ └── rubberband-c.h
└── lib
├── librubberband.a
└── pkgconfig
└── rubberband.pc
该文件rubberband.pc是从中复制的,rubberband.in.pc并进行了一些细微的更改。
prefix=/path/to/rubberband/install/root
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: rubberband
Version: 1.8.1
Description:
Libs: -L${libdir} -lrubberband -L/path/to/android/ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a -lgnustl_static
Cflags: -I${includedir}
然后加
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/path/to/rubberband/install/root
之前./configure告诉 ffmpeg find rubberbandby pkg-config。
我尝试过最新的ffmpeg,它可以工作。