find_library cannot find .so when cross-compiling ARM under Windows

I’m cross-compiling an Android executable which need a dynamic library named libplate_recognizer.so using Visual Studio on Win11, and I’m trying to use find_library to find the library:

...
find_library(tttt
            NAMES plate_recognizer plate_recognizerd libplate_recognizer.so plate_recognizer.so
            PATHS  D:/qidi/plate-recognition/out/build/android-Release/plate_recognizer
            NO_CACHE
)
message(${tttt})
...

I’m sure the libplate_recognizer.so is under the directory I specified above, but CMake cannot find it.

By the way I’ve tried use different NAMES like plate_recognizer but neither of them works.

Does cmake --debug-find help provide any context here?

Thanks for your help. I enabled CMAKE_FIND_DEBUG_MODE and got such log (I’v omitted some unrelated log) :

1> [CMake] -- ANDROID_PLATFORM not set. Defaulting to minimum supported version
1> [CMake] 19.
1> [CMake] tttt-NOTFOUND
1> [CMake] CMake Debug Log at demo/pg_demo/CMakeLists.txt:26 (find_library):
1> [CMake]   find_library(tttt) removed original suffix
1> [CMake]   D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/lib/arm-linux-androideabi/
1> [CMake]   from PATH_SUFFIXES while adding architecture paths for suffix '32'
1> [CMake] 
1> [CMake] 
1> [CMake] 
1> [CMake] CMake Debug Log at demo/pg_demo/CMakeLists.txt:26 (find_library):
1> [CMake]   find_library(tttt) removed original suffix
1> [CMake]   D:/android-ndk-r25c/qidi/plate-recognition/out/build/android-Release/lib/arm-linux-androideabi/
1> [CMake]   from PATH_SUFFIXES while adding architecture paths for suffix '32'
1> [CMake] 
1> [CMake] 

...

1> [CMake] CMake Debug Log at demo/pg_demo/CMakeLists.txt:26 (find_library):
1> [CMake]   find_library(tttt) removed original suffix
1> [CMake]   D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/qidi/plate-recognition/out/build/android-Release/%SystemRoot%/System32/Wbem/lib/arm-linux-androideabi/
1> [CMake]   from PATH_SUFFIXES while adding architecture paths for suffix '32'
1> [CMake] 
1> [CMake] 
1> [CMake] CMake Debug Log at demo/pg_demo/CMakeLists.txt:26 (find_library):
1> [CMake]   find_library(tttt) removed original suffix
1> [CMake]   D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/qidi/plate-recognition/out/build/android-Release/%SystemRoot%/System32/Wbem/lib/
1> [CMake]   from PATH_SUFFIXES while adding architecture paths for suffix '32'
1> [CMake] 
1> [CMake] 

1> [CMake] 
1> [CMake] CMake Debug Log at demo/pg_demo/CMakeLists.txt:26 (find_library):
1> [CMake]   find_library(tttt) removed original suffix
1> [CMake]   D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/qidi/plate-recognition/out/build/android-Release/plate_recognizer/
1> [CMake]   from PATH_SUFFIXES while adding architecture paths for suffix '32'
1> [CMake] 
1> [CMake] 
1> [CMake] CMake Debug Log at demo/pg_demo/CMakeLists.txt:26 (find_library):
1> [CMake]   find_library called with the following settings:
1> [CMake] 
1> [CMake]     VAR: tttt
1> [CMake]     NAMES: "plate_recognizer"
1> [CMake]            "plate_recognizerd"
1> [CMake]            "libplate_recognizer.so"
1> [CMake]            "plate_recognizer.so"
1> [CMake]     Documentation: Path to a library.
1> [CMake]     Framework
1> [CMake]       Only Search Frameworks: 0
1> [CMake]       Search Frameworks Last: 0
1> [CMake]       Search Frameworks First: 0
1> [CMake]     AppBundle
1> [CMake]       Only Search AppBundle: 0
1> [CMake]       Search AppBundle Last: 0
1> [CMake]       Search AppBundle First: 0
1> [CMake]     CMAKE_FIND_USE_CMAKE_PATH: 1
1> [CMake]     CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: 1
1> [CMake]     CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: 1
1> [CMake]     CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: 1
1> [CMake] 
1> [CMake]   find_library considered the following locations:
1> [CMake] 
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/lib/(lib)plate_recognizer(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/(lib)plate_recognizer(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/19/(lib)plate_recognizer(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/local/(lib)plate_recognizer(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/32/(lib)plate_recognizer(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/(lib)plate_recognizer(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/(lib)plate_recognizer(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/(lib)plate_recognizer(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/lib/(lib)plate_recognizerd(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/(lib)plate_recognizerd(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/19/(lib)plate_recognizerd(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/local/(lib)plate_recognizerd(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/32/(lib)plate_recognizerd(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/(lib)plate_recognizerd(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/(lib)plate_recognizerd(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/(lib)plate_recognizerd(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/lib//(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/lib/(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64//(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/19//(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/19/(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/local//(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/local/(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/32//(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/32/(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi//(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib//(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr//(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/(lib)libplate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/lib//(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/lib/(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64//(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/19//(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/19/(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/local//(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/local/(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/32//(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/32/(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi//(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/arm-linux-androideabi/(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib//(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr//(lib)plate_recognizer.so(\.so|\.a)
1> [CMake]     D:/android-ndk-r25c/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/(lib)plate_recognizer.so(\.so|\.a)
1> [CMake] 
1> [CMake]   The item was not found.


Seems cmake doesn’t search D:/qidi/ that I’ve hinted but always D:/android-ndk-r25c/qidi/ , anyway to prevent that? :grinning:

Cross-compiling introduces some weird search behaviors. I wonder if the CMAKE_FIND_* control variables are interfering. Though I thought find debugging mentioned when those were taking effect as well (@robert.maynard?). Does anything improve if you say HINTS instead of PATHS?

No. HINTS works the same with PATHS.

Solved by set(CMAKE_FIND_ROOT_PATH "D:/") (Originaly is D:/android-ndk-r25c which may causes the weird search path).