在用NDK编译库的时候有时候会出现下面这个问题:
-- Configuring done
CMake Error at CMakeLists.txt:87 (add_executable):
Target "XXX" links to target "Iconv::Iconv" but the target was not
found. Perhaps a find_package() call is missing for an IMPORTED target, or
an ALIAS target is missing?
CMake Error at CMakeLists.txt:98 (add_executable):
Target "test_cls" links to target "Iconv::Iconv" but the target was not
found. Perhaps a find_package() call is missing for an IMPORTED target, or
an ALIAS target is missing?
之前碰到一次,解决了现在又碰到一次,记录一下。
iconv是一个用于字符编码转换的库,它可以在不同的字符编码之间转换文本。例如,你可以使用iconv将UTF-8编码的文本转换为ISO-8859-1编码。
加入find_package(Iconv)就ok了。
find_package(Iconv)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android")
add_definitions(-DNDK_ANDROID_LOG)
set(OpenCV_DIR "/media/xp/data/3rd_party_lib/opencv/4.8.1/arm64-v8a/sdk/native/jni/abi-arm64-v8a/")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${CMAKE_CURRENT_LIST_DIR}/tnn_android/include)
set(yaml-cpp_DIR "/home/xp/3rd_party/yaml-cpp/ndk_build/install/lib/cmake/yaml-cpp")
find_package(yaml-cpp REQUIRED)
list(APPEND DEP_LIBS ${YAML_CPP_LIBRARIES})
list(APPEND DEP_LIBS ${CMAKE_CURRENT_LIST_DIR}/tnn_android/arm64-v8a/libTNN.so ${OpenCV_LIBS})
message(STATUS "OPENCV_LIBS: ${OpenCV_LIBS}")
set(android_log /media/xp/data/3rd_party/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29/liblog.so)
list(APPEND DEP_LIBS ${android_log})
find_package(Iconv)
message(STATUS "Iconv_LIBRARIES: ${Iconv_LIBRARIES}")
message(STATUS "Iconv_INCLUDE_DIR: ${Iconv_INCLUDE_DIR}")
list(APPEND DEP_LIBS ${Iconv_LIBRARIES})
endif()
编译输出
-- The C compiler identification is Clang 14.0.7
-- The CXX compiler identification is Clang 14.0.7
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /media/xp/data/3rd_party/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/bin/clang - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /media/xp/data/3rd_party/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /media/xp/data/3rd_party_lib/opencv/4.8.1/arm64-v8a (found version "4.8.1")
-- OPENCV_LIBS: opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_gapi;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_stitching;opencv_video;opencv_videoio;opencv_aruco;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_datasets;opencv_dnn_objdetect;opencv_dnn_superres;opencv_dpm;opencv_face;opencv_fuzzy;opencv_hfs;opencv_img_hash;opencv_intensity_transform;opencv_line_descriptor;opencv_mcc;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_quality;opencv_rapid;opencv_reg;opencv_rgbd;opencv_saliency;opencv_shape;opencv_stereo;opencv_structured_light;opencv_superres;opencv_surface_matching;opencv_text;opencv_tracking;opencv_videostab;opencv_wechat_qrcode;opencv_xfeatures2d;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto
-- Performing Test Iconv_IS_BUILT_IN
-- Performing Test Iconv_IS_BUILT_IN - Success
-- Found Iconv: built in to C library
-- Iconv_LIBRARIES:
-- Iconv_INCLUDE_DIR:
-- Configuring done
-- Generating done
-- Build files have been written to: /media/xp/data/proj/XXX/deploy/XXX_deploy/ndk_build
[ 12%] Building CXX object CMakeFiles/XXX_tnn.dir/main.cpp.o
[ 50%] Building CXX object CMakeFiles/XXX_tnn.dir/src/person_cls.cpp.o
[ 75%] Building CXX object CMakeFiles/test_cls.dir/test_cls.cpp.o
[ 75%] Building CXX object CMakeFiles/XXX_tnn.dir/src/XXX_tnn.cpp.o
[ 75%] Building CXX object CMakeFiles/test_cls.dir/src/person_cls.cpp.o
[ 75%] Building CXX object CMakeFiles/XXX_tnn.dir/src/camera_CMEI.cpp.o
[ 87%] Linking CXX executable test_cls
[ 87%] Built target test_cls
[100%] Linking CXX executable XXX_tnn
[100%] Built target XXX_tnn