当前位置: 首页 > 知识库问答 >
问题:

Android studio 2.3.2上的JNI编译错误

厍建义
2023-03-14

我正在制作应用程序,以广播电话视频到youtube频道。我找到了这个链接https://github.com/youtube/yt-watchme。

编译我的代码时,我得到了错误

在文件avecode.h代码#include“libavutil/samplefmt.h”中找不到libavutil

错误:失败:生成失败,出现异常。*错误:
执行任务“:app:ExternalNativeBuildDebug”失败。
生成命令失败。
执行进程时出错

/users/nomankhan/library/android/sdk/cmake/3.6.4111459/bin/cmake带参数{--build/clients/ankur/jnidemo/app/.externalnativebuild/cmake/debug/mips64--target native-lib}
[1/2]构建CXX对象cmakefiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
失败:ux-android--gcc-toolchain=/users/nomankhan/library/android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64-sysroot=/users/nomankhan/library/android/sdk/ndk-bundle/sysroot-dnative_lib_exports-i./.../.../.../.../src/main/cpp/include/libdec-i./.用户/nomankhan/library/android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include-isystem/users/nomankhan/library/android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/include-isystem/users/nomankhan/library/android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/backback-isystem/users/nomankhan/library/android/sdk/ndk-bundle/sysroot/usr/include/mips64el-linux-android-d__android_api__=21-g-dandroid-ffunction-sections-funwind-tables-fstack-no-canonical-prefixes-fintegrat-as-wa,-lib.dir/src/main/cpp/native-lib.cpp.o-Mf cmakefiles/native-lib.dir/src/main/cpp/native-lib.cpp.o.d-o cmakefiles/native-lib.dir/src/main/cpp/native-lib.cpp

在包含于/clients/ankur/jnidemo/app/src/main/cpp/native-lib.cpp:4:/clients/ankur/jnidemo/app/src/main/cpp/libavcodec/avcodec.h:31:10:致命错误:'libavutil/samplefmt.h'文件未找到#include“libavutil/samplefmt.h”^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我的cmakelists.txt

 cmake_minimum_required(VERSION 3.4.1)

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )

find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )


target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

include_directories(src/main/cpp/include/libavcodec)

include_directories(src/main/cpp/include/libavformat)

include_directories(src/main/cpp/include/libavutil)

共有1个答案

宇文良骏
2023-03-14

下面的答案是假设cpp中的文件夹包含C++代码/src文件。如果没有,那么您可能有代码和库结构问题。

简单地调用include_directories不会得到cmake来编译它们,我相信这只会帮助IDE进行某些“语法突出显示”和编码相关的事情,但这很重要。

相反,您需要在add_library调用中包含代码文件。很明显,您有很多文件,这样的遍历代码将会有所帮助:

cmake_minimum_required(VERSION 3.4.1)

include_directories(src/main/cpp/include/libavcodec)        

# Traverses through the directories recursively 
# and append matching files to variable my_lib_SRC
file(GLOB_RECURSE my_lib_SRC
    "src/main/cpp/*.h"
    "src/main/cpp/*.cpp"
)

add_library( # Sets the name of the library.
         native-lib

         # Sets the library as a shared library.
         SHARED

         # Provides a relative path to your source file(s).
         ${my_lib_SRC})

target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )
 类似资料:
  • 从事maven项目。我试图使用maven进行构建,但我遇到了以下错误!我正在使用JDK 8开发eclipse。 无法执行目标org.apache.maven.plugins:maven-compiler-plugin:2.3.2:编译(默认编译) 我也尝试了上面的解决方案,但我仍然得到错误!

  • 我试图从spark 1.6迁移到2.0,但仅在2.0上编译时出现以下错误: 无法找到存储在数据集中的类型的编码器。导入支持原始类型(Int、String等)和产品类型(case类)spark.implicits._将在未来版本中添加对序列化其他类型的支持。val subGroupCount: Array[Seq[any]]=columns.map(c= 问候

  • 问题内容: 我想安装rJava,但没有用。当我在控制台中键入R CMD javareconf时,出现以下错误: 任何想法如何解决? 问题答案: 该文件是JDK安装的一部分。您可能没有正确安装Java JDK。从此处下载Oracle Java ,或使用软件包管理器。 如果您已经安装了Java JDK,则将JAVA_HOME环境变量设置为指向JDK目录。

  • 如果我重新编译,在C源代码中添加一个空白的main()方法,并删除-C标志,那么它将失败,并出现UnsatisfiedLinkError(无法在64位计算机上加载32位DLL)。 为什么Java调用一个没有main方法的DLL是无效的?这难道不会破坏DLL文件和JNI的全部意义吗? 更新

  • 我是Mulesoft Dataweave语言的新手,我不明白我在code-1和code-2语法中犯了什么错误。它在if块上显示一个编译时错误。你能建议我在下面的脚本中犯了什么错误吗?

  • [ERROR]$home/workspace/javaExamplePbServiceCall/src/main/java/example/ServiceCallPiqi.java:[13,23]ERROR:';‘预期 手工编译产生100个错误,这里是第一个: javac-cp$home/.m2/repository/com/google/protobuf/protobuf-java/2.4.1/