我正试图为android编写openh264项目,但遇到了一些麻烦。我已经正确地设置了AndroidNDK-R10,并且能够编译ndk提供的示例应用程序。
这是我到现在为止所做的。从这里下载了openh264的zip,https://github.com/cisco/openh264。使用cmd提示符导航到openh264-openh264v1.1\codec\build\android\dec\jni路径,然后启动ndk命令。它启动构建过程,但在为编码器和解码器构建库时抛出错误。以下是生成编码器库时的错误.
[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同样,在构建解码器库时,将面临以下错误.
[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的新成员,他们正面临着艰难的时期。请求你的帮助,在正确的方向上有一些有用的指示。
发布于 2014-09-03 09:00:52
多亏了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项目,然后按照我在最初的问题中提到的步骤构建用于解码器/编码器的样例安卓应用程序。
发布于 2014-08-12 06:24:32
请参阅README.md in OpenH264中有关如何为android构建它的说明。
您在codec\ build \ android \dec中找到的android项目只构建了一个解码器的测试示例--它不构建编解码器本身。项目根中的主makefile ( README.md描述了如何使用)将构建编解码器本身和测试示例。
https://stackoverflow.com/questions/25243003
复制相似问题