Cmake Android NDK构建在添加FFmpeg后失败,错误为:找不到-lnative 首先,我在Android和C++上构建本地代码是相当新的,所以我可能错过了一些更为成熟的开发人员非常明显的东西……
我正在开发一款用于音频处理的Android应用程序。到目前为止,这一切都是有效的,我设置了NDK,添加了一个CMakeLists.txt,编译了我的代码并运行了应用程序,一切都很好 现在,我尝试按照本文描述的步骤将FFmpeg集成到我的项目中:。我使用这里提供的脚本编译FFmpeg,并将文件移动到提到的文件夹中。我对CMakeList.txt进行了更改,以便能够使用已编译的FFmpeg文件,IDE可以很好地查看所有内容 但我的构建因以下错误而中断:Cmake Android NDK构建在添加FFmpeg后失败,错误为:找不到-lnative 首先,我在Android和C++上构建本地代码是相当新的,所以我可能错过了一些更为成熟的开发人员非常明显的东西……,cmake,android-ndk,Cmake,Android Ndk,我正在开发一款用于音频处理的Android应用程序。到目前为止,这一切都是有效的,我设置了NDK,添加了一个CMakeLists.txt,编译了我的代码并运行了应用程序,一切都很好 现在,我尝试按照本文描述的步骤将FFmpeg集成到我的项目中:。我使用这里提供的脚本编译FFmpeg,并将文件移动到提到的文件夹中。我对CMakeList.txt进行了更改,以便能够使用已编译的FFmpeg文件,IDE可以很好地查看所有内容 但我的构建因以下错误而中断: Users/myuserfolder/Libr
Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lnative
我在谷歌上做了一些搜索和研究,但似乎没有弄明白。不知道这里到底缺少什么,在哪里可以得到它…非常感谢任何帮助
这是我的CMakeList.txt
set(FFMPEG_DIR /volumes/work/repos/android/ffmpeg/build/${ANDROID_ABI})
include_directories(src/main/cpp/)
include_directories(native-lib ${FFMPEG_DIR}/include)
add_library(avformat SHARED IMPORTED)
set_target_properties(avformat PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/lib/libavformat.so)
add_library(avutil SHARED IMPORTED)
set_target_properties(avutil PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/lib/libavutil.so)
add_library(avcodec SHARED IMPORTED)
set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/lib/libavcodec.so)
add_library(swresample SHARED IMPORTED)
set_target_properties(swresample PROPERTIES IMPORTED_LOCATION
${FFMPEG_DIR}/lib/libswresample.so)
add_library(native-lib
SHARED
src/main/cpp/native-lib.cpp
src/main/cpp/AudioEngine.cpp
src/main/cpp/DataSource.h
src/main/cpp/StorageDataSource.cpp
src/main/cpp/LockFreeQueue.h
src/main/cpp/logging.h
src/main/cpp/NDKExtractor.cpp
src/main/cpp/Constants.h
src/main/cpp/OpenGLFunctions.cpp
src/main/cpp/Player.cpp
src/main/cpp/Mixer.h
src/main/cpp/IRenderableAudio.h
src/main/cpp/UtilityFunctions.cpp
src/main/cpp/FFMpegExtractor.h
src/main/cpp/FFMpegExtractor.cpp
)
set(TARGET_LIBS log android oboe GLESv2)
set(TARGET_LIBS ${TARGET_LIBS} native avformat avutil avcodec swresample)
target_link_libraries(native-lib ${TARGET_LIBS})
#set(CMAKE_CXX_STANDARD 14)
# Set the path to the Oboe directory.
set(OBOE_DIR /Volumes/Work/Repos/Android/oboe-test/oboe)
# Add the Oboe library as a subdirectory.
add_subdirectory(${OBOE_DIR} ./oboe)
# Specify the path to the Oboe header files.
include_directories(${OBOE_DIR}/include)
这是本机生成任务日志输出的结束部分(完整日志太大,无法发布):
为什么要将
native
添加到target\u link\u libraries
语句中?它不在你链接的文章中,也不在你的CMake文件中定义。你是对的。它不属于那里,它也导致了错误。不知道这是怎么结束的,但当我把它移除时,一切都按预期进行。谢谢你指出这一点!因为这是一个评论,所以我不能将其标记为可接受的答案。。。
Build native-lib_armeabi-v7a
(...)
[38/41] /Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv7-none-linux-androideabi21 --gcc-toolchain=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -DOBOE_ENABLE_LOGGING=1 -Dnative_lib_EXPORTS -I../../../../src/main/cpp -I../../../../native-lib -I/volumes/work/repos/android/ffmpeg/build/armeabi-v7a/include -I/Volumes/Work/Repos/Android/oboe-test/oboe/include -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++14 -frtti -fexceptions -O0 -fno-limit-debug-info -fPIC -MD -MT CMakeFiles/native-lib.dir/src/main/cpp/Player.cpp.o -MF CMakeFiles/native-lib.dir/src/main/cpp/Player.cpp.o.d -o CMakeFiles/native-lib.dir/src/main/cpp/Player.cpp.o -c /Volumes/Work/Repos/Android/MyApp/app/src/main/cpp/Player.cpp
[39/41] /Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv7-none-linux-androideabi21 --gcc-toolchain=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -DOBOE_ENABLE_LOGGING=1 -Dnative_lib_EXPORTS -I../../../../src/main/cpp -I../../../../native-lib -I/volumes/work/repos/android/ffmpeg/build/armeabi-v7a/include -I/Volumes/Work/Repos/Android/oboe-test/oboe/include -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++14 -frtti -fexceptions -O0 -fno-limit-debug-info -fPIC -MD -MT CMakeFiles/native-lib.dir/src/main/cpp/UtilityFunctions.cpp.o -MF CMakeFiles/native-lib.dir/src/main/cpp/UtilityFunctions.cpp.o.d -o CMakeFiles/native-lib.dir/src/main/cpp/UtilityFunctions.cpp.o -c /Volumes/Work/Repos/Android/MyApp/app/src/main/cpp/UtilityFunctions.cpp
[40/41] /Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv7-none-linux-androideabi21 --gcc-toolchain=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -DOBOE_ENABLE_LOGGING=1 -Dnative_lib_EXPORTS -I../../../../src/main/cpp -I../../../../native-lib -I/volumes/work/repos/android/ffmpeg/build/armeabi-v7a/include -I/Volumes/Work/Repos/Android/oboe-test/oboe/include -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++14 -frtti -fexceptions -O0 -fno-limit-debug-info -fPIC -MD -MT CMakeFiles/native-lib.dir/src/main/cpp/FFMpegExtractor.cpp.o -MF CMakeFiles/native-lib.dir/src/main/cpp/FFMpegExtractor.cpp.o.d -o CMakeFiles/native-lib.dir/src/main/cpp/FFMpegExtractor.cpp.o -c /Volumes/Work/Repos/Android/MyApp/app/src/main/cpp/FFMpegExtractor.cpp
[41/41] : && /Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv7-none-linux-androideabi21 --gcc-toolchain=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++14 -frtti -fexceptions -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,-z,noexecstack -shared -Wl,-soname,libnative-lib.so -o ../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/AudioEngine.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/StorageDataSource.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/NDKExtractor.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/OpenGLFunctions.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/Player.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/UtilityFunctions.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/FFMpegExtractor.cpp.o -llog -landroid oboe/liboboe.a -lGLESv2 -lnative /volumes/work/repos/android/ffmpeg/build/armeabi-v7a/lib/libavformat.so /volumes/work/repos/android/ffmpeg/build/armeabi-v7a/lib/libavutil.so /volumes/work/repos/android/ffmpeg/build/armeabi-v7a/lib/libavcodec.so /volumes/work/repos/android/ffmpeg/build/armeabi-v7a/lib/libswresample.so -llog -lOpenSLES -latomic -lm && :
FAILED: : && /Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv7-none-linux-androideabi21 --gcc-toolchain=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++14 -frtti -fexceptions -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,-z,noexecstack -shared -Wl,-soname,libnative-lib.so -o ../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/AudioEngine.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/StorageDataSource.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/NDKExtractor.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/OpenGLFunctions.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/Player.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/UtilityFunctions.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/FFMpegExtractor.cpp.o -llog -landroid oboe/liboboe.a -lGLESv2 -lnative /volumes/work/repos/android/ffmpeg/build/armeabi-v7a/lib/libavformat.so /volumes/work/repos/android/ffmpeg/build/armeabi-v7a/lib/libavutil.so /volumes/work/repos/android/ffmpeg/build/armeabi-v7a/lib/libavcodec.so /volumes/work/repos/android/ffmpeg/build/armeabi-v7a/lib/libswresample.so -llog -lOpenSLES -latomic -lm && :
/Users/myuserfolder/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lnative
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.