未定义引用错误,无法创建共享库

2024-02-19

尝试了很多方法来解决问题但没有运气。这是我的 Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)  
LOCAL_MODULE := avcodec
LOCAL_SRC_FILES :=libavcodec.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)   
LOCAL_MODULE := avutil
LOCAL_SRC_FILES :=libavutil.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS) 
LOCAL_MODULE := swscale
LOCAL_SRC_FILES :=libswscale.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)  
LOCAL_MODULE := avformat
LOCAL_SRC_FILES :=libavformat.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)   
LOCAL_MODULE := avresample
LOCAL_SRC_FILES :=libavresample.a
include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)   
LOCAL_MODULE := swresample
LOCAL_SRC_FILES :=libswresample.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS) 
LOCAL_MODULE :=     x264
LOCAL_SRC_FILES :=libx264.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)  
#------------------------------------------
LOCAL_C_INCLUDES := $(LOCAL_PATH)\
$(LOCAL_PATH)/include

LOCAL_MODULE    := media

LOCAL_SRC_FILES := \
P_Decoding.cpp \
P_Encoding.cpp \
wrapper_for_ffmpeg.cpp

LOCAL_CPPFLAGS := -std=c++11 -pthread -frtti -fexceptions

LOCAL_ARM_MODE := arm 

LOCAL_STATIC_LIBRARIES := avcodec avutil swscale avformat avresample swresample x264

LOCAL_LDLIBS :=  -llog -ljnigraphics -landroid -lz -lEGL

LOCAL_CPP_FEATURES :=  rtti exceptions 

include $(BUILD_SHARED_LIBRARY)

在 jni 文件夹中,有与 makefile 上的 .cpp 文件相关的所有头文件 .hpp 文件,还有所有静态 .a 库和“include”文件夹,其中包含与静态库相关的所有头文件。我用的是ndk9c版本。 这是错误日志的一部分:

[armeabi-v7a] Compile++ thumb: media <= P_Decoding.cpp
[armeabi-v7a] Compile++ thumb: media <= P_Encoding.cpp
[armeabi-v7a] Compile++ thumb: media <= wrapper_for_ffmpeg.cpp

/home/pro/android-ndk-r9c/toolchains/llvm-3.3/prebuilt/linux-x86/bin/clang++ -Wl,-soname,libmedia.so -shared --sysroot=/home/pro/android-ndk- r9c/platforms/android-9/arch-arm ./obj/local/armeabi/objs/media/P_Decoding.o ./obj/local/armeabi/objs/media/P_Encoding.o jni/libavformat.a jni/libavcodec。 jni/libavutil.a jni/libswscale.a -lgcc ./obj/local/armeabi/libgnustl_shared.so -gcc-toolchain /home/pro/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt /linux-x86 -no-canonical-prefixes -target armv5te-none-linux-androideabi -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -L /home/pro/android-ndk-r9c/platforms/android-9/arch-arm/usr/lib -llog -ljnigraphics -lz -ldl -lgcc /home/pro/android-ndk-r9c/sources/cxx-stl /gnu-libstdc++/4.8/libs/armeabi/libsupc++.a -lc -lm -o ./obj/local/armeabi/libmedia.so

jni/P_Decoding.cpp:10: error: undefined reference to 'avcodec_register_all'
jni/P_Decoding.cpp:17: error: undefined reference to 'avcodec_find_decoder'
jni/P_Decoding.cpp:14: error: undefined reference to 'avcodec_find_decoder_by_name'
jni/P_Decoding.cpp:24: error: undefined reference to 'avcodec_alloc_context3'
jni/P_Decoding.cpp:50: error: undefined reference to 'avcodec_open2'
jni/P_Decoding.cpp:56: error: undefined reference to 'avcodec_alloc_frame'
jni/P_Decoding.cpp:76: error: undefined reference to 'sws_getContext'
jni/P_Decoding.cpp:90: error: undefined reference to 'avcodec_decode_video2'
jni/P_Decoding.cpp:104: error: undefined reference to 'sws_scale'
jni/P_Decoding.cpp:118: error: undefined reference to 'avcodec_close'

请提供任何帮助。提前致谢


确保您已添加extern "C"阻止包含 libavcodec 和 swscale 标头,例如像这样:

extern "C" {
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
}

See https://libav.org/faq.html#I_0027m-using-Libav-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-可用_002e https://libav.org/faq.html#I_0027m-using-Libav-from-within-my-C_002b_002b-application-but-the-linker-complains-about-missing-symbols-which-seem-to-be-available_002e获取解释此内容的文档。


编辑:另外,您确定预构建的 libavcodec.a 与您正在构建的架构(armeabi-v7a)相同吗?如果您正在为多个架构(armeabi-v7a、x86 等)构建共享库,您还需要有多个相应版本的预构建库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未定义引用错误,无法创建共享库 的相关文章

随机推荐

  • 在领域迁移期间创建领域对象

    您能够在迁移期间创建领域对象吗 我想要提取现有领域对象的一部分并使用该数据创建一个新对象 但迁移总是挂起 这是我的迁移代码 private class var migrationBlock MigrationBlock return mig
  • 是否可以从 Chromium 扩展中禁用 Flash 插件?

    我知道可以手动禁用 Chromium 中的 Flash 插件 只需转到 chrome plugins 找到 Adobe Flash Player 并将其禁用即可 我想知道是否可以使用 JavaScript 代码或扩展中的任何客户端脚本语言来
  • ASP.NET 图片上传并调整大小

    我有一个 aspx 页面 它将图像从客户端电脑上传到服务器硬盘 但现在我需要更改我的程序 以便我可以在上传时调整图像大小 有人对此有任何想法吗 我无法使用输入文件服务器控件找到此类属性 方法 有人指导我吗 将文件保存到服务器后 您可以使用这
  • Laravel 中的关系和 Blade

    我有 3 个表 如下所述 Table 1 user id username password Name Age Table 2 tasks id task name description Table 3 logs id user id t
  • 重写继承的抽象类中的抽象方法

    好吧 基本上我有以下问题 我试图让一个抽象类继承另一个具有抽象方法的抽象类 但我不想在它们中的任何一个中实现抽象方法 因为第三个类继承了两个类其中 public abstract class Command public abstract
  • 如何分析本机 JNI 库

    如何分析用 C 编写的 Java 本机接口库 我了解常用的 C 分析器 但我的问题是如何分析whole设置包括对 JVM 方法的调用 这可能会减慢程序速度 经过对这里提出的一些方法的一些研究和测试后 我最终使用了sprof 基本上我遵循了可
  • dotnetcore 中的服务结构客户端身份验证 UserPasswordCredential 不起作用

    我正在 aspnetcore dotnetcore2 0 应用程序中构建一个小型服务结构维护 但现在无法识别 UserPasswordCredential 类 从here https github com AzureAD azure act
  • 如何检测设备上是否存在Android Market?

    有些Android设备没有Android Market 例如韩国等 是否可以在运行时检测Android Market的存在 我知道我可以先尝试打开一个市场 uri 看看是否有抛出任何异常 但我认为这不是一个明智的做法 我知道我可以尝试打开一
  • Unicode 代码页 1200 到底是什么?

    在研究一些本地化选项时 我偶然发现它是 Visual Studio 中的保存选项 Unicode 代码页 1200 到底是什么 微软文档页面代码页标识符 https learn microsoft com en us windows win
  • 使用 printf 格式在 C 中打印等宽列

    我想在 C 中使用 printf 打印列 我编写了以下代码 include
  • didReceiveRemoteNotification:fetchCompletionHandler:从图标打开与推送通知

    我正在尝试实现后台推送通知处理 但在确定用户是否从发送的推送通知打开应用程序而不是从图标打开应用程序时遇到问题 void application UIApplication application didReceiveRemoteNotif
  • 在 JavaScript 上添加/删除监听器(垃圾收集器)

    我有一个关于添加 删除 DOM 对象的侦听器的快速问题 我想问垃圾收集器是否能够在从页面中删除元素时收集内存 示例 一个 ul 带有几个孩子列表的标签 li var ul document getElementById someParent
  • 带有模板参数的模板中的默认值 (C++)

    假设我有一个模板 称为 ExampleTemplate 它接受两个参数 容器类型 例如列表 向量 和包含类型 例如 float bool 等 由于容器实际上是模板 因此该模板有一个模板参数 这就是我必须写的 include
  • python 异常。UnicodeDecodeError: 'ascii' 编解码器无法解码字节 0xa7

    我正在将 scrapy 与 python 结合使用 并且在 python item pipline 中有此代码 def process item self item spider import pdb pdb set trace ID st
  • Django 表单 - 验证错误后重新加载时变量类型发生变化

    我花了一些时间 但无法找出以下行为的确切原因 我有一个 Django 表单 在模板中我试图查看列表中是否存在整数 然后用它做一些事情 if pk in form area value form area value is a list li
  • 有没有办法设置X轴的背景颜色

    我检查了文档 我能找到的只是设置笔划 但我需要整个 x 轴背景不仅仅是字体颜色 Renaldo Balaj 好吧 你可以像这里一样向你的图表添加一个 svg 元素 https codesandbox io s highlight zomm
  • 如何比较两个日期[重复]

    这个问题在这里已经有答案了 我有一个带有 PHP 前端的 MySQL 数据库 在我的记录中 我有一个直接从数据库访问的发布日期和到期日期 我需要做的是检查并查看是否有任何记录的过期日期与发布日期相符 就像是 你可以这样做 posted da
  • LiveData 观察者未调用

    我有一个活动 TabBarActivity承载一个片段 EquipmentRecyclerViewFragment 片段收到 LiveData 回调 但 Activity 没有 在调试模式下使用断点进行证明 奇怪的是 如果我调用 ViewM
  • dyld:惰性符号绑定失败:找不到符号:_PQsetErrorContextVisibility

    跑步时 psql 我收到这个错误 dyld lazy symbol binding failed Symbol not found PQsetErrorContextVisibility Referenced from usr local
  • 未定义引用错误,无法创建共享库

    尝试了很多方法来解决问题但没有运气 这是我的 Android mk LOCAL PATH call my dir include CLEAR VARS LOCAL MODULE avcodec LOCAL SRC FILES libavco