mediaNdk неопределенная ссылка на «AMediaCodec_signalEndOfInputStream»

не удается найти AMediaCodec_signalEndOfInputStream в процессе ссылки.

ExportThread.cpp источник

файл конфигурации

апиуровень android-21

вот мой конфиг

CmakeLists.txt

target_link_libraries(${Lib_Name}

                       android
                       mediandk
                       EGL
                       GLESv3
                       log )

gradle.build

        ndk {
            abiFilters 'armeabi-v7a'
//            , 'armeabi-v7a', 'arm64-v8a'
        }
        externalNativeBuild {
            cmake {
                arguments '-DANDROID_PLATFORM=android-21'
            }
        }

ошибки

[35/35] Linking CXX shared library /Users/rqg/ASProjects/PboTest/muses/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so
  FAILED: : && /Users/rqg/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++  --target=armv7-none-linux-androideabi --gcc-toolchain=/Users/rqg/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64 --sysroot=/Users/rqg/Library/Android/sdk/ndk-bundle/sysroot -fPIC -isystem /Users/rqg/Library/Android/sdk/ndk-bundle/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security   -std=c++11 -frtti -fexceptions -Wall -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a --sysroot /Users/rqg/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o /Users/rqg/ASProjects/PboTest/muses/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so CMakeFiles/native-lib.dir/DecodeThread.cpp.o CMakeFiles/native-lib.dir/DelayThread.cpp.o CMakeFiles/native-lib.dir/EffectLine.cpp.o CMakeFiles/native-lib.dir/EffectManager.cpp.o CMakeFiles/native-lib.dir/ExportThread.cpp.o CMakeFiles/native-lib.dir/NativeSurfaceTexture.cpp.o CMakeFiles/native-lib.dir/Painter.cpp.o CMakeFiles/native-lib.dir/PboPool.cpp.o CMakeFiles/native-lib.dir/Player.cpp.o CMakeFiles/native-lib.dir/PrepareThread.cpp.o CMakeFiles/native-lib.dir/RenderManager.cpp.o CMakeFiles/native-lib.dir/RenderTask.cpp.o CMakeFiles/native-lib.dir/effect/BlurEffect.cpp.o CMakeFiles/native-lib.dir/effect/BoostEffect.cpp.o CMakeFiles/native-lib.dir/effect/ChaplinEffect.cpp.o CMakeFiles/native-lib.dir/effect/Effect.cpp.o CMakeFiles/native-lib.dir/effect/FadeEffect.cpp.o CMakeFiles/native-lib.dir/effect/NormalEffect.cpp.o CMakeFiles/native-lib.dir/framesource/IFrameSource.cpp.o CMakeFiles/native-lib.dir/framesource/ImageFrameSource.cpp.o CMakeFiles/native-lib.dir/framesource/VideoFrameSource.cpp.o CMakeFiles/native-lib.dir/gl/EglCore.cpp.o CMakeFiles/native-lib.dir/gl/surface/EglSurfaceBase.cpp.o CMakeFiles/native-lib.dir/gl/surface/OffscreenSurface.cpp.o CMakeFiles/native-lib.dir/gl/surface/WindowSurface.cpp.o CMakeFiles/native-lib.dir/native-lib.cpp.o CMakeFiles/native-lib.dir/render/BlurRender.cpp.o CMakeFiles/native-lib.dir/render/FadeRender.cpp.o CMakeFiles/native-lib.dir/render/NormalRender.cpp.o CMakeFiles/native-lib.dir/render/PolygonOffsetRenderer.cpp.o CMakeFiles/native-lib.dir/render/Render.cpp.o CMakeFiles/native-lib.dir/util/DelayLooper.cpp.o CMakeFiles/native-lib.dir/util/Looper.cpp.o CMakeFiles/native-lib.dir/util/common.cpp.o  -landroid -lmediandk -lEGL -lGLESv3 -llog -lm "/Users/rqg/Library/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a" && :
  /Users/rqg/ASProjects/PboTest/muses/src/main/cpp/ExportThread.cpp:37: error: undefined reference to 'AMediaCodec_signalEndOfInputStream'
  /Users/rqg/ASProjects/PboTest/muses/src/main/cpp/ExportThread.cpp:107: error: undefined reference to 'AMediaCodec_createInputSurface'
  clang++: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.

person Fantasy_RQG    schedule 22.07.2017    source источник
comment
напиши ExportThread.cpp тогда   -  person pskink    schedule 22.07.2017
comment
@pskink добавьте мой ExportThread.cpp, используемый на line 37   -  person Fantasy_RQG    schedule 22.07.2017
comment
кажется, что libmediandk.so пропускает эти символы, перейдите в папку lib и попробуйте запустить nm libmediandk.so | grep AMediaCodec_signalEndOfInputStream   -  person pskink    schedule 22.07.2017
comment
AMediaCodec_signalEndOfInputStream нет, есть ли обходной путь для выполнения этой работы?   -  person Fantasy_RQG    schedule 22.07.2017
comment
хорошо, что вы видите, если вы выполняете grep для AMediaCodec_? вы видите 18 символов?   -  person pskink    schedule 22.07.2017
comment
там 17 символов. но я нахожу AMediaCodec_signalEndOfInputStream в libmediandk.so android-26. но в заголовочном файле этот метод помечен как доступный выше android-21   -  person Fantasy_RQG    schedule 22.07.2017
comment
нет, я искал 21, 22, 23 и 24, и ни один заголовок не имел AMediaCodec_signalEndOfInputStream - по вашему мнению, он должен быть в NdkMediaCodec.h, но это не так - поэтому я понятия не имею, как вы смогли скомпилировать свой код   -  person pskink    schedule 22.07.2017
comment
заголовочный файл в Android/sdk/ndk-bundle/sysroot/usr/include/media/NdkMediaCodec.h . На платформах заголовок android-26 также не содержит AMediaCodec_signalEndOfInputStream , но символы можно найти в его файле lib   -  person Fantasy_RQG    schedule 22.07.2017
comment
ваша команда имеет два --sysroot=, поэтому здесь что-то не так (один указывает на /Users/rqg/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm второй на /Users/rqg/Library/Android/sdk/ndk-bundle/sysroot   -  person pskink    schedule 22.07.2017
comment
да, вот мои файлы конфигурации gist.github.com/fantasyRqg/7d430f6e5041a35bb7b54cd09734dd81   -  person Fantasy_RQG    schedule 22.07.2017
comment
arguments '-DANDROID_PLATFORM=android-21' а если изменить на 26?   -  person pskink    schedule 22.07.2017
comment
сообщение об ошибке java.lang.UnsatisfiedLinkError: dlopen failed: cannot find "libGLESv3.so" from verneed[5] in DT_NEEDED list for "/data/app/rqg.fantasy.pbotest-2/lib/arm/libnative-lib.so"   -  person Fantasy_RQG    schedule 22.07.2017
comment
ты чистил свою сборку?   -  person pskink    schedule 22.07.2017
comment
все еще получаю ту же ошибку msg. обновить gradle, обновить проект ссылки С++, очистить проект, удалить каталог сборки и каталог .externalNativeBuild.   -  person Fantasy_RQG    schedule 22.07.2017
comment
так что не знаю...   -  person pskink    schedule 22.07.2017
comment
большое спасибо @pskink, я все еще могу использовать java MediaCodec для кодирования. Я просто хочу, чтобы все было сделано в ndk.   -  person Fantasy_RQG    schedule 22.07.2017


Ответы (1)


Это ошибка в NDK r.15. Этот API был представлен только в android-26. Кстати, вы можете положиться на то, что Android Studio установит -DANDROID_PLATFORM в соответствии с minSdkVersion, выбранным в build.gradle.

person Alex Cohn    schedule 22.07.2017