Сообщение об ошибке:
Build command failed.
Error while executing process Y:\001_DevelopTools\002_Android_SDK\cmake\3.6.4111459\bin\cmake.exe with arguments {--build Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\.externalNativeBuild\cmake\debug\armeabi-v7a --target native-lib}
[1/9] Building C object librtmp/CMakeFiles/rtmp.dir/parseurl.c.o
[2/9] Building C object librtmp/CMakeFiles/rtmp.dir/amf.c.o
[3/9] Building C object librtmp/CMakeFiles/rtmp.dir/hashswf.c.o
[4/9] Building C object librtmp/CMakeFiles/rtmp.dir/rtmp.c.o
[5/9] Building C object librtmp/CMakeFiles/rtmp.dir/log.c.o
In file included from Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\src\main\cpp\librtmp\amf.c:33:
Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\src\main\cpp\librtmp/bytes.h:74:2: warning: "Float word order not defined, assuming the same as byte order!" [-W#warnings]
#warning "Float word order not defined, assuming the same as byte order!"
^
1 warning generated.
[6/9] Linking C static library librtmp\librtmp.a
[7/9] Building CXX object CMakeFiles/native-lib.dir/VedioChannel.cpp.o
[8/9] Building CXX object CMakeFiles/native-lib.dir/native-lib.cpp.o
clang++: warning: argument unused during compilation: '-LY:/002_WorkSpace/001_AS/RTMP_Pusher/app/src/main/cpp/libs/armeabi-v7a' [-Wunused-command-line-argument]
clang++: warning: argument unused during compilation: '-LY:/002_WorkSpace/001_AS/RTMP_Pusher/app/src/main/cpp/libs/armeabi-v7a' [-Wunused-command-line-argument]
[9/9] Linking CXX shared library Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so
FAILED: cmd.exe /C "cd . && Y:\001_DevelopTools\002_Android_SDK\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi21 --gcc-toolchain=Y:/001_DevelopTools/002_Android_SDK/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=Y:/001_DevelopTools/002_Android_SDK/ndk-bundle/toolchains/llvm/prebuilt/windows-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 -LY:/002_WorkSpace/001_AS/RTMP_Pusher/app/src/main/cpp/libs/armeabi-v7a -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 Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so CMakeFiles/native-lib.dir/native-lib.cpp.o CMakeFiles/native-lib.dir/VedioChannel.cpp.o librtmp/librtmp.a -llog -latomic -lm && cd ."
Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\src\main\cpp/VedioChannel.cpp:23: error: undefined reference to 'x264_picture_clean'
Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\src\main\cpp/VedioChannel.cpp:79: error: undefined reference to 'x264_param_default_preset'
Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\src\main\cpp/VedioChannel.cpp:169: error: undefined reference to 'x264_picture_clean'
Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\src\main\cpp/VedioChannel.cpp:177: error: undefined reference to 'x264_picture_alloc'
Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\src\main\cpp/VedioChannel.cpp:182: error: undefined reference to 'x264_encoder_close'
Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\src\main\cpp/VedioChannel.cpp:186: error: undefined reference to 'x264_encoder_open_157'
Y:\002_WorkSpace\001_AS\RTMP_Pusher\app\src\main\cpp/VedioChannel.cpp:248: error: undefined reference to 'x264_encoder_encode'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
CMakeList.txt Скрипт сборки следующий : Следуйте этому сценарию сборки , Проверьте шаг за шагом ;
cmake_minimum_required(VERSION 3.4.1)
# Связь src/main/cpp/librtmp в каталоге Строить Скрипт
add_subdirectory(librtmp)
add_library( # функция Библиотекаимя
native-lib
# Тип динамической библиотеки
SHARED
# исходный файл
native-lib.cpp
VedioChannel.cpp)
find_library( # бревно Библиотека log-lib
log )
# Установить путь поиска файла заголовка
include_directories(include)
# Установив опцию компилировать, Установите путь поиска для функции Библиотека.
# Вот ANDROID_ABI находится в
# build.gradle android->defaultConfig->externalNativeBuild->cmake
# вниз abiFilters серединанастраивать
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")
target_link_libraries( # Связьдинамичный Библиотека
native-lib
# компилироватьиз rtmp статический Библиотека rtmp
${log-lib} )
Когда код NDK скомпилирован, он выполняется.
шаги, шаги 1 ~ 6:
При запуске сборки укажите первую строку содержимого сценария компиляции add_subdirectory(librtmp) и скомпилируйте содержимое CMakeList.txt в каталог librtmp;
# Связь src/main/cpp/librtmp в каталоге Строить Скрипт
add_subdirectory(librtmp)
Компиляция исходного кода RTMP. На этом этапе выполняется следующий сценарий сборки и компилируется библиотека librtmp.so, которая соответствует следующему содержимому сценария.
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_CRYPTO")
add_library( # Название Библиотеки для компилирования: rtmp
rtmp
# компилироватьиз rtmp Библиотекастатичен Библиотека STATIC
# rtmp Библиотекаизисходный файл
amf.c
hashswf.c
log.c
parseurl.c
rtmp.c )
Нет.
Шаг 1. Скомпилируйте исходный код VedioChannel.cpp, скомпилируйте исходный код Native-lib.cpp и соответствующим образом скомпилируйте библиотеку функций libnative-lib.so;
add_library( # функция Библиотекаимя
native-lib
# Тип динамической библиотеки
SHARED
# исходный файл
native-lib.cpp
VedioChannel.cpp)
Нет.
Шаг: свяжите библиотеку функций. На этом этапе произошла ошибка связи, функция в библиотеке с открытым исходным кодом x264 не найдена;
x264 Процесс компиляции библиотеки с открытым исходным кодом : x264 Заголовочные файлы библиотеки с открытым исходным кодом помещаются в include в каталоге , Кросс-скомпилированная библиотека функций помещается в libs/armeabi-v7a в каталоге ;
# Установить путь поиска файла заголовка
include_directories(include)
# Установив опцию компилировать, Установите путь поиска для функции Библиотека.
# Вот ANDROID_ABI находится в
# build.gradle android->defaultConfig->externalNativeBuild->cmake
# вниз abiFilters серединанастраивать
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")
Библиотека с открытым исходным кодом x264 должна быть скомпилирована и передана. При связывании x264 не связывается с собственной библиотекой, что приводит к невозможности доступа к функциям библиотеки с открытым исходным кодом x264;
target_link_libraries( # Связьдинамичный Библиотека
native-lib
# компилироватьиз rtmp статический Библиотека rtmp
${log-lib} )
Метод модификации : При подключении библиотеки , Воля x264 Библиотека добавлена ;
target_link_libraries( # Связьдинамичный Библиотека
native-lib
# компилироватьиз rtmp статический Библиотека rtmp
# предварительнокомпилироватьиз x264 статический Библиотека x264
${log-lib} )
Окончательный модифицированный сценарий сборки (правильный сценарий сборки):
cmake_minimum_required(VERSION 3.4.1)
# Связь src/main/cpp/librtmp в каталоге Строить Скрипт
add_subdirectory(librtmp)
add_library( # функция Библиотекаимя
native-lib
# Тип динамической библиотеки
SHARED
# исходный файл
native-lib.cpp
VedioChannel.cpp)
find_library( # бревно Библиотека log-lib
log )
# Установить путь поиска файла заголовка
include_directories(include)
# Установив опцию компилировать, Установите путь поиска для функции Библиотека.
# Вот ANDROID_ABI находится в
# build.gradle android->defaultConfig->externalNativeBuild->cmake
# вниз abiFilters серединанастраивать
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")
target_link_libraries( # Связьдинамичный Библиотека
native-lib
# компилироватьиз rtmp статический Библиотека rtmp
# предварительнокомпилироватьиз x264 статический Библиотека x264
${log-lib} )
Сводка ошибок : встретиться Linking CXX shared library Шаг не выполнен , и подскажи error: undefined reference to функция не может быть найдена , На этапе связывания произошла ошибка , Исправлять CMakeList.txt в target_link_libraries параметры ссылки ;