我正在尝试为android编译openh264项目但面临一些麻烦。 我已正确设置android_ndk-r10并能够编译随ndk提供的示例应用程序。
这是我到目前为止所做的。从这里https://github.com/cisco/openh264下载了openh264的zip。 使用cmd提示符导航到openh264-openh264v1.1 \ codec \ build \ android \ dec \ _jni路径,然后触发ndk-build命令。 它启动构建过程,但在为编码器和解码器构建库时抛出错误。以下是构建编码器lib时的错误....
[armeabi] Compile++ thumb: welsencdemo <= welsenc.cpp
[armeabi] Compile++ thumb: welsencdemo <= read_config.cpp
[armeabi] Compile++ thumb: welsencdemo <= myjni.cpp
[armeabi] Prebuilt : libstlport_shared.so <= <NDK>/sources/cxx-stl/stlport
/libs/armeabi/thumb/
[armeabi] SharedLibrary : libwelsencdemo.so
D:/Softwares/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/windo
ws-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-android
eabi/bin/ld.exe: D:/Work/Android/OpenH264/openh264-openh264v1.1/codec/build/andr
oid/enc//obj/local/armeabi/objs/welsencdemo/__/__/__/__/console/enc/src/welsenc.
o: in function CreateSVCEncHandle(ISVCEncoder**):D:/Work/Android/OpenH264/openh2
64-openh264v1.1/codec/build/android/enc//jni/../../../../console/enc/src/welsenc
.cpp:931: error: undefined reference to 'WelsCreateSVCEncoder'
D:/Softwares/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/windo
ws-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-android
eabi/bin/ld.exe: D:/Work/Android/OpenH264/openh264-openh264v1.1/codec/build/andr
oid/enc//obj/local/armeabi/objs/welsencdemo/__/__/__/__/console/enc/src/welsenc.
o: in function DestroySVCEncHandle(ISVCEncoder*):D:/Work/Android/OpenH264/openh2
64-openh264v1.1/codec/build/android/enc//jni/../../../../console/enc/src/welsenc
.cpp:937: error: undefined reference to 'WelsDestroySVCEncoder'
collect2: ld returned 1 exit status
make.exe: *** [D:/Work/Android/OpenH264/openh264-openh264v1.1/codec/build/androi
d/enc//obj/local/armeabi/libwelsencdemo.so] Error 1
同样在构建解码器lib时面临如下错误....
[armeabi] Compile++ thumb: welsdecdemo <= h264dec.cpp
[armeabi] Compile++ thumb: welsdecdemo <= read_config.cpp
[armeabi] Compile++ thumb: welsdecdemo <= d3d9_utils.cpp
[armeabi] Compile++ thumb: welsdecdemo <= myjni.cpp
[armeabi] Prebuilt : libstlport_shared.so <= <NDK>/sources/cxx-stl/stlport
/libs/armeabi/thumb/
[armeabi] SharedLibrary : libwelsdecdemo.so
D:/Softwares/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/windo
ws-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-android
eabi/bin/ld.exe: D:/Work/Android/OpenH264/openh264-openh264v1.1/codec/build/andr
oid/dec//obj/local/armeabi/objs/welsdecdemo/__/__/__/__/console/dec/src/h264dec.
o: in function DecMain(int, char**):D:/Work/Android/OpenH264/openh264-openh264v1
.1/codec/build/android/dec//jni/../../../../console/dec/src/h264dec.cpp:417: err
or: undefined reference to 'WelsCreateDecoder'
D:/Softwares/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/windo
ws-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-android
eabi/bin/ld.exe: D:/Work/Android/OpenH264/openh264-openh264v1.1/codec/build/andr
oid/dec//obj/local/armeabi/objs/welsdecdemo/__/__/__/__/console/dec/src/h264dec.
o: in function DecMain(int, char**):D:/Work/Android/OpenH264/openh264-openh264v1
.1/codec/build/android/dec//jni/../../../../console/dec/src/h264dec.cpp:447: err
or: undefined reference to 'WelsDestroyDecoder'
collect2: ld returned 1 exit status
make.exe: *** [D:/Work/Android/OpenH264/openh264-openh264v1.1/codec/build/androi
d/dec//obj/local/armeabi/libwelsdecdemo.so] Error 1
在尝试构建之前,我没有对我下载的openh264代码进行任何更改。它是一个链接错误,我尝试通过更改welsdecdemo.mk文件来修复,该文件引用了代码中可用的.h和.cpp文件,但仍然得到相同的错误。作为一名java开发人员和新的NDK和cpp正面临着艰难的时期。 请求您的帮助,并在正确的方向上提供一些有用的指示。
答案 0 :(得分:0)
请参阅OpenH264中的README.md,了解如何为Android构建它。
你在codec \ build \ android \ dec中找到的android项目只构建了解码器的测试示例 - 它不构建编解码器本身。项目根目录中的主要makefile(README.md描述了如何使用)将构建编解码器本身和测试示例。
答案 1 :(得分:0)
感谢mstorsjo,我可以成功编译openh264库,并运行android解码器/编码器示例应用程序。解码/编码效果很好。
为Android编译OpenH264项目(使用windows)的步骤如mstorsjo所述: -
你需要 1)MSYS 2)android-ndk 3)OpenH264项目
然后从MSYS中,“make OS = android NDKROOT = / unix / path / to / ndk TARGET = 9 libopenh264.so”。现在,您可以像以前一样在codec / build / android中构建示例项目。
构建OpenH264项目后,按照原始问题中提到的步骤构建解码器/编码器的示例android应用程序。