想用cmake的方式来编译官方的 squeezencnn demo,结果出错
环境:ubuntu16.04 cmake:3.10 android studio:3.2 NDK:r20
用预编译的库也不行,自己编译的也不行,去掉vulkan也不行
Error while executing process /home/syj/Android/Sdk/cmake/3.10.2.4988404/bin/cmake with arguments {--build /home/syj/PycharmProjects/onnx/squeeze/MyApplication3/app/.externalNativeBuild/cmake/debug/armeabi-v7a --target native-lib}
[1/1] Linking CXX shared library ../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so
FAILED: ../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so
: && /home/syj/Android/Sdk/ndk/19.2.5345600/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi24 --gcc-toolchain=/home/syj/Android/Sdk/ndk/19.2.5345600/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/syj/Android/Sdk/ndk/19.2.5345600/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mfpu=vfpv3-d16 -fno-addrsig -march=armv7-a -mthumb -mfpu=neon -Wa,--noexecstack -Wformat -Werror=format-security -stdlib=libc++ -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 -Wl,-z,relro -Wl,-z,now -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 ../../../../src/main/jni/armeabi-v7a/libncnn.a -ljnigraphics /home/syj/Android/Sdk/ndk/19.2.5345600/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/24/liblog.so -latomic -lm && :
/home/syj/ncnn/src/net.cpp:559: error: undefined reference to 'AAssetManager_open'
/home/syj/ncnn/src/net.cpp:567: error: undefined reference to 'AAsset_close'
/home/syj/ncnn/src/net.cpp:580: error: undefined reference to 'AAssetManager_open'
/home/syj/ncnn/src/net.cpp:588: error: undefined reference to 'AAsset_close'
/home/syj/ncnn/src/net.cpp:600: error: undefined reference to 'AAssetManager_open'
/home/syj/ncnn/src/net.cpp:608: error: undefined reference to 'AAsset_close'
/home/syj/ncnn/src/cpu.cpp:478: error: undefined reference to 'omp_set_num_threads'
/home/syj/ncnn/src/cpu.cpp:480: error: undefined reference to '__kmpc_fork_call'
/home/syj/ncnn/src/cpu.cpp:481: error: undefined reference to '__kmpc_for_static_init_4'
/home/syj/ncnn/src/cpu.cpp:480: error: undefined reference to '__kmpc_for_static_fini'
/home/syj/ncnn/src/cpu.cpp:516: error: undefined reference to 'omp_get_num_threads'
/home/syj/ncnn/src/cpu.cpp:525: error: undefined reference to 'omp_set_num_threads'
/home/syj/ncnn/src/cpu.cpp:534: error: undefined reference to 'omp_get_dynamic'
。。。
/home/syj/ncnn/src/layer/arm/absval_arm.cpp:67: error: undefined reference to '__kmpc_for_static_fini'
/home/syj/ncnn/src/layer/batchnorm.cpp:72: error: undefined reference to '__kmpc_global_thread_num'
/home/syj/ncnn/src/layer/batchnorm.cpp:85: error: undefined reference to '__kmpc_push_num_threads'
/home/syj/ncnn/src/layer/batchnorm.cpp:0: error: undefined reference to '__kmpc_fork_call'
/home/syj/ncnn/src/layer/arm/batchnorm_arm.cpp:33: error: undefined reference to '__kmpc_global_thread_num'
/home/syj/ncnn/src/layer/convolutiondepthwise.cpp:458: error: undefined reference to '__kmpc_for_static_init_8'
/home/syj/ncnn/src/layer/convolutiondepthwise.cpp:594: error: undefined reference to '__kmpc_for_static_init_8'
/home/syj/ncnn/src/layer/convolutiondepthwise.cpp:737: error: undefined reference to '__kmpc_for_static_init_8'
/home/syj/ncnn/src/layer/deconvolutiondepthwise.cpp:216: error: undefined reference to '__kmpc_for_static_init_8'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
CMakeList.txt里面
find_library(log-lib log)改成 find_library(log-lib log android)
target_link_libraries()在后面添加android
Most helpful comment
可以参考这里的写法
https://github.com/nihui/ncnn-android-styletransfer/blob/master/app/src/main/jni/CMakeLists.txt