- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 libogg 添加到我的 android NDK 项目中。
我正在使用 SDL 库附带的项目模板。
我在 Windows 上,所以以下所有脚本都是在 MSYS(一个 Linux 终端仿真器)下执行的。
首先,我生成了一个独立的工具链。
android-ndk/build/tools/make-standalone-toolchain.sh --platform=android-12 --system=windows-x86_64 --toolchain=arm-linux-androideabi-4.9 --install-dir=Y:/gcc_android_androideabi-4.9_api12/
然后我构建了库。
make clean
configure CC="/y/gcc_android_androideabi-4.9_api12/bin/arm-linux-androideabi-gcc" LIBS="-lgnustl_shared" CFLAGS="-mthumb" --host=arm-linux-androideabi
make
然后我将生成的 libogg.so
复制到我的项目文件夹并将以下内容添加到我的 jni/src/Android.mk
:
...
include $(CLEAR_VARS)
LOCAL_MODULE := ogg-prebuilt
LOCAL_SRC_FILES := ../../prebuilt-libs/$(TARGET_ARCH_ABI)/libogg.so
include $(PREBUILT_SHARED_LIBRARY)
...
LOCAL_SHARED_LIBRARIES := ... ogg-prebuilt ...
...
类似的代码适用于我使用的其他库。
ndk-build
成功找到我的库并将它们添加到 .apk
。
当我在运行时调用 System.loadLibrary("ogg");
时出现问题。动态链接器给我的错误消息是这样的
Can't find library "libogg.so.0".
我确定我的库加载代码没有问题,因为它适用于我拥有的其他库。
动态链接器的错误很有趣,因为 make
不只是生成单个 libogg.so
。它生成了 3 个完全相同但名称不同的文件:libogg.so
、libogg.so.0
和 libogg.so.0.8.2
。
我尝试用 libogg.so.0
替换 libogg.so
并正确调整 Android.mk
,但是 NDK 构建脚本在我,说预建的共享库必须有 .so
扩展名。我试图将 libogg.so.0
复制到 libs/
文件夹,但是 NDK 构建脚本在构建 .apk
时忽略了它。
然后我在十六进制编辑器中打开 libogg.so
并搜索 libogg
。我只发现了一个:libogg.so.0[NUL]
。我用 2 个 [NUL]
替换了 .0
,所以它变成了 libogg.so[NUL][NUL][NUL]
和现在的库完美加载。
我可以使用我使用的所有工具链重现此错误:arm-linux-androideabi-gcc-4.9
、i686-linux-android-gcc-4.9
和 mipsel-linux-android-gcc-4.9
。它们都是使用类似的脚本生成的。
如果我将 libogg.so.0
或 libogg.so.0.8.2
重命名为 libogg.so
并使用它,错误仍然存在而不是原来的。正如我所说,这三个文件都具有相同的内容。
虽然我可以制作一个 sed
脚本来在必要时自动修复 .so
文件中的库名称,但我想知道是否有更好的解决方案来解决这个问题.
也许我必须在 configure
中添加一些标志?
最佳答案
我稍微不那么老套的解决方法是从 libogg 的构建系统中删除版本信息。
在您拥有 libogg 源代码的目录中,打开文件 src/Makefile.am
并更改此行:
libogg_la_LDFLAGS = -no-undefined -version-info @LIB_CURRENT@:@LIB_REVISION@:@LIB_AGE@
到
libogg_la_LDFLAGS = -avoid-version
如果您没有安装 automake,那么您可以在运行 ./configure
后更改生成的 Makefile。找到 libogg_la_LDFLAGS
并对上面详述的内容进行类似的更改。在 Linux 上,像这样的 sed 一行就可以完成这项工作:
sed -i 's/^libogg_la_LDFLAGS.*/libogg_la_LDFLAGS = -avoid-version/g' src/Makefile
关于android - 使用独立工具链编译的 Libogg(由 NDK 脚本生成)尝试从不正确的文件加载自身 - libogg.so.0 而不是 libogg.so,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35039189/
我正在尝试将 libogg 添加到我的 android NDK 项目中。 我正在使用 SDL 库附带的项目模板。 我在 Windows 上,所以以下所有脚本都是在 MSYS(一个 Linux 终端仿真
我一直在尝试使用 Mountain Lion 中的 iOS 5.1 SDK 为 armv6、armv6 和 i386 交叉编译 libogg。 Libogg 使用 autoconf,我也遇到了与其他一
请帮助我,我正在用我的项目中的libvorbis-libogg-android录制声音并编码为ogg。当我的录制时间超过30秒时,我的应用崩溃了, private class AsyncEncodin
我正在尝试更新应用程序,但它需要为 iOS 编译 libogg 和 libvorbis,因为 SDK 是新的并且需要重新编译。 未包含说明。有谁知道如何为 iOS 编译这两个库? 谢谢! 最佳答案 由
我刚刚从 http://www.xiph.org/downloads/ 下载了 libogg (http://downloads.xiph.org/releases/ogg/libogg-1.3.0.
在我的 Android 应用程序中,我想实现 libogg 和 libvorbis 库,以便我可以播放和操作 ogg 文件。 不幸的是,我还没有找到任何可以解释如何实现这一目标的教程。 也就是说,这是
环境:Mac OS X 10.9.2、Xcode 5.1。构建 shell 脚本如下: #!/bin/sh set -xe VERSION="1.3.1" DESTDIR="libogg-built"
我目前正在编写一个简单的 Theora 视频编码器,它使用 libogg、libvorbis 和 libtheora。目前,我可以将帧提交给 Theora 编码器,将 PCM 样本提交给 Vorbis
嗨,我正在尝试在 Mac OSX 10.6 上编译 libsndfile 1.0.25 我已经用 brew 安装了 libvorbis-1.3.4 和 libogg-1.3.1 1 - 我尝试用 br
我是一名优秀的程序员,十分优秀!