错误发生在链接阶段。确保链接目录已添加到-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 rubberband
by pkg-config
。
我尝试过最新的ffmpeg,它可以工作。