热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c/c++开发分享使用ffmpeg2.1.1forAndroid时未定义的引用

我正在按照与halfninja构建相同的模式构建ffmpeg:通过JNI从Java获取ffmpeg的main。我使用以下选项构建了ffmpeg:.configure--prefix

我正在按照与halfninja构建相同的模式构建 ffmpeg:通过JNI从Java获取ffmpeg的main 。 我使用以下选项构建了ffmpeg:

 ./configure  --prefix=$PREFIX  --disable-shared  --enable-static  --disable-doc  --disable-ffmpeg  --disable-ffplay  --disable-ffprobe  --disable-ffserver  --disable-doc  --disable-symver  --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-  --target-os=linux  --arch=arm  --enable-cross-compile  --sysroot=$SYSROOT  --extra-cflags="-Os -fpic $ADDI_CFLAGS"  --extra-ldflags="$ADDI_LDFLAGS" 

$PREFIXTOOLCHAIN ,…从我的NDK设置为相应的文件夹。 $ADDI_CFLAGS设置为-marm$ADDI_LDFLAGS$ADDITIONAL_CONFIGURE_FLAGS $ADDI_LDFLAGS设置。 生成的静态库:

  $ ls -1 android / arm / lib /  libavcodec.a  libavdevice.a  libavfilter.a  libavformat.a  libavutil.a  libswresample.a  libswscale.a  pkgconfig 

我用一个Android.mk文件公开它们,ffmpeg是在$NDK/sources/ffmpeg-2.1.1构建的:

 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= libavdevice LOCAL_SRC_FILES:= lib/libavdevice.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavcodec LOCAL_SRC_FILES:= lib/libavcodec.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavformat LOCAL_SRC_FILES:= lib/libavformat.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libswscale LOCAL_SRC_FILES:= lib/libswscale.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavutil LOCAL_SRC_FILES:= lib/libavutil.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavfilter LOCAL_SRC_FILES:= lib/libavfilter.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libwsresample LOCAL_SRC_FILES:= lib/libswresample.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY) 

所以,到那里,一切看起来都不错。 现在,我尝试将ffmpeg二进制等价物构建为静态库。 我在我的jni文件夹中复制了(并且现在没有更改单个字符) ffmpeg.cffmpeg.hcmdutils.ccmdutils.hffmpeg_opt.cffmpeg_filter.c 。 我在这个文件夹中也有两个直接与JNI相关的文件(从halfninja的build中复制,我刚刚更改了包名)。 这是相关的Android.mk

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_C_INCLUDES := /Applications/android-ndk-r9b/sources/ffmpeg-2.1.1 LOCAL_CFLAGS := -Wdeprecated-declarations LOCAL_MODULE := videokit ANDROID_LIB := -landroid LOCAL_LDLIBS += -llog -ljnigraphics -lz LOCAL_SRC_FILES := videokit/com_rfc_video_ffmpeg_Videokit.c videokit/ffmpeg.c videokit/cmdutils.c videokit/ffmpeg_opt.c videokit/ffmpeg_filter.c LOCAL_SHARED_LIBRARIES := libavdevice libavformat libavfilter libavcodec libwscale libavutil libswresample libswscale libpostproc include $(BUILD_SHARED_LIBRARY) $(call import-module,ffmpeg-2.1.1/android/arm) 

一切都很好,但没有链接。 这是第一个错误:

  [armeabi] SharedLibrary:libvideokit.so  /Applications/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../ .. /../arm-linux-androideabi/bin/ld:./obj/local/armeabi/objs/videokit/videokit/cmdutils.o:in function print_all_libs_info.constprop.5:jni / videokit / cmdutils.c:1063:错误:对'swresample_version'的未定义引用  /Applications/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../ .. /../arm-linux-androideabi/bin/ld:./obj/local/armeabi/objs/videokit/videokit/cmdutils.o:in function print_all_libs_info.constprop.5:jni / videokit / cmdutils.c:1063:错误:对'swresample_configuration'的未定义引用  /Applications/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../ .. /../arm-linux-androideabi/bin/ld:./ obj / local / armeabi / objs / videokit / videokit / cmdutils.o:in function opt_default:jni / videokit / cmdutils.c:558:error:undefined reference到'swr_get_class'  /Applications/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../ .. /../arm-linux-androideabi/bin/ld:./obj/local/armeabi/objs/videokit/videokit/cmdutils.o:in function opt_default:jni / videokit / cmdutils.c:561:error:undefined reference 'swr_alloc'  /Applications/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../ .. /../arm-linux-androideabi/bin/ld:./obj/local/armeabi/objs/videokit/videokit/cmdutils.o:in function opt_default:jni / videokit / cmdutils.c:563:error:undefined reference 'swr_free'  /Applications/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../ .. /../arm-linux-androideabi/bin/ld:./obj/local/armeabi/objs/videokit/videokit/ffmpeg_opt.o:in function show_help_default:jni / videokit / ffmpeg_opt.c:2464:error:undefined reference到'swr_get_class' 

我不明白的是这些函数是在libswresample.a中定义和提供的,我将链接到:

  arm-linux-androideabi-nm /Applications/android-ndk-r9b/sources/ffmpeg-2.1.1/android/arm/lib/libswresample.a |  grep -i -e swr_get_class -e swresample_version  000001d4 T swr_get_class  00000178 T swresample_version 

我究竟做错了什么? 还有另一种更简单的方法可以将ffmpeg公开为通过JNI提供的静态库吗? (我不使用halfninja,因为我需要至少ffmpeg 1.1,而他的是0.9)。

    你的名字有点混乱:在一个地方,你称之为libwsresample ,其他地方是libswresample

    检查所有名称是否一致。

    需要了解更多c/c++开发分享使用ffmpeg 2.1.1 for Android时未定义的引用,也可以关注C/ C++技术分享栏目—编程笔记

      以上就是c/c++开发分享使用ffmpeg 2.1.1 for Android时未定义的引用相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(编程笔记)。


      推荐阅读
      • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
      • 基于Linux开源VOIP系统LinPhone[四]
        ****************************************************************************************** ... [详细]
      • 解决Only fullscreen opaque activities can request orientation错误的方法
        本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
      • 深入解析 Lifecycle 的实现原理
        本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
      • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
        在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
      • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
        本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
      • Android 构建基础流程详解
        Android 构建基础流程详解 ... [详细]
      • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
      • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
      • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
        近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
      • ARM汇编基础基于Keil创建STM32汇编程序的编写
        文章目录一、新建项目(1)工具介绍(2)创建项目:二、配置环境(1)配置芯片&#x ... [详细]
      • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
        在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
      • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
      • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
      • 本文深入探讨了MDK链接脚本的应用与优化技巧。首先,文章介绍了链接脚本的基本概念及其在嵌入式系统开发中的重要性。接着,通过具体实例详细分析了链接脚本的结构和功能,特别是在程序在FLASH中运行时,如何优化链接脚本以提高系统性能。此外,文章还讨论了无需将程序加载到SRAM中的技术细节,为开发者提供了实用的参考和指导。 ... [详细]
      author-avatar
      直由飞翔_447
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有