2017-09-16 3 views
1

JNI erreur de compilation sur Studio Android 2.3.2

Je fais application à diffuser de la vidéo de téléphone à la chaîne youtube. J'ai trouvé ce lien https://github.com/youtube/yt-watchme.

Lors de la compilation de mon code, j'obtiens l'erreur

libavutil not found in file avecode.h at code #include "libavutil/samplefmt.h

J'ai aussi changé #include "../libavutil/samplefmt.h" toujours la même erreur.

Peut-être suggérer une bonne bibliothèque rtmp pour diffuser la vidéo du téléphone sur le canal youtube.

Error:FAILURE: Build failed with an exception. * What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
Build command failed.
Error while executing process

/Users/nomankhan/Library/Android/sdk/cmake/3.6.4111459/bin/cmake with arguments {--build /Clients/Ankur/JniDemo/app/.externalNativeBuild/cmake/debug/mips64 --target native-lib}
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
FAILED: /Users/nomankhan/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=mips64el-none-linux-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/libavcodec -I../../../../src/main/cpp/include/libavformat -I../../../../src/main/cpp/include/libavutil -isystem /Users/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/backward -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-protector-strong -no-canonical-prefixes -fintegrated-as -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fno-limit-debug-info -fPIC -MD -MT CMakeFiles/native-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.o -c /Clients/Ankur/JniDemo/app/src/main/cpp/native-lib.cpp

In file included from /Clients/Ankur/JniDemo/app/src/main/cpp/native-lib.cpp:4: /Clients/Ankur/JniDemo/app/src/main/cpp/libavcodec/avcodec.h:31:10: fatal error: 'libavutil/samplefmt.h' file not found #include "libavutil/samplefmt.h" ^~~~~~~~~~~~~~~~~~~~~~~

Mon 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) 
+0

Je crois que vous avez besoin de 'include_directories (src/main/cpp)' à la place des trois dernières instructions. Dans ** native-lib.cpp **, vous devriez avoir '#include" libavcodec/avcodec.h "'. –

Répondre

1

La réponse ci-dessous est en supposant que les dossiers dans cpp contient des fichiers code/src C++. Si non, alors vous avez probablement un problème de structuration de code et de bibliothèques.

appelant simplement include_directories se pas se CMake les compiler, je crois que ça va juste aider l'IDE dans certains « coloration syntaxique » et le codage des choses connexes, mais il est important. Au lieu de cela, vous devrez inclure les fichiers de code dans l'appel add_library. Comme il est tout à fait évident que vous avez beaucoup de fichiers, un code traversal en tant que tels aider:

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}) 

NOTE: Chaque fois que vous ajoutez un nouveau fichier de source/code, vous devrez nettoyer et reconstruire le projet pour que les binaires soient construits correctement. D'autres explications peuvent être trouvées ici: https://stackoverflow.com/a/17655165/2949966

+0

Cela a fonctionné. Pouvez-vous donner quelques liens sur cmake dans android ou exemple de tutoriel. Merci –

+0

Pour être honnête, la plupart de mes connaissances proviennent de messages/questions sur différents sujets, il n'y avait pas un très bon tutoriel que j'ai trouvé bénéfique, cela dépendait de ce que je cherchais ou se mettre au travail mais je suis sûr que il y en a quelques-uns que je n'ai pas vus. Cependant, je pourrais vous fournir une implémentation que j'ai faite pour OpenCV qui utilise cmake pour construire les modules OpenCV et permettre aux développeurs d'écrire du code C/C++ natif et de bénéficier de la compilation croisée: https://github.com/ahasbini/Android- OpenCV. Veuillez envisager de choisir la réponse comme une solution pour marquer la question complète. – ahasbini

+0

Je joins le lien du projet https://github.com/nomi2013/JniCompileWithCmake D'où je peux obtenir ces dossiers et les fichiers nécessaires libavcodec ibavformat libavutil libavcodec En fait, quand je compilent des fichiers manquants. Merci –