# find\_library cannot find .so when cross-compiling ARM under Windows

**URL:** https://discourse.cmake.org/t/find-library-cannot-find-so-when-cross-compiling-arm-under-windows/8676
**Category:** Usage
**Tags:** os:windows
**Created:** [August 4, 2023, 1:32pm UTC](https://discourse.cmake.org/t/find-library-cannot-find-so-when-cross-compiling-arm-under-windows/8676 "2023-08-04T13:32:57Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Mactarvish](https://discourse.cmake.org/user_avatar/discourse.cmake.org/mactarvish/32/3674_2.png) [@Mactarvish](https://discourse.cmake.org/u/Mactarvish)
#### Post date: [August 4, 2023, 1:32pm UTC](https://discourse.cmake.org/t/find-library-cannot-find-so-when-cross-compiling-arm-under-windows/8676/1 "2023-08-04T13:32:57Z")

</div>

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:

```auto
...
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.

 ![image](https://discourse.cmake.org/uploads/default/original/2X/c/cbe424d0cca0940ef9be900939d45f7f1f24dc6c.png)

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

---

<div class="post-metadata">

### Author: ![ben.boeckel](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/b/ea5d25/32.png) [@ben.boeckel](https://discourse.cmake.org/u/ben.boeckel)
#### Post date: [August 7, 2023, 11:35am UTC](https://discourse.cmake.org/t/find-library-cannot-find-so-when-cross-compiling-arm-under-windows/8676/2 "2023-08-07T11:35:10Z")

</div>

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

---

<div class="post-metadata">

### Author: ![Mactarvish](https://discourse.cmake.org/user_avatar/discourse.cmake.org/mactarvish/32/3674_2.png) [@Mactarvish](https://discourse.cmake.org/u/Mactarvish)
#### Post date: [August 7, 2023, 12:17pm UTC](https://discourse.cmake.org/t/find-library-cannot-find-so-when-cross-compiling-arm-under-windows/8676/3 "2023-08-07T12:17:06Z")

</div>

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

```auto
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? 😀

---

<div class="post-metadata">

### Author: ![ben.boeckel](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/b/ea5d25/32.png) [@ben.boeckel](https://discourse.cmake.org/u/ben.boeckel)
#### Post date: [August 7, 2023, 2:06pm UTC](https://discourse.cmake.org/t/find-library-cannot-find-so-when-cross-compiling-arm-under-windows/8676/4 "2023-08-07T14:06:38Z")

</div>

> [@Mactarvish](#):
>
> Seems cmake doesn’t search `D:/qidi/` that I’ve hinted but always `D:/android-ndk-r25c/qidi/` , anyway to prevent that? 😀

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`?

---

<div class="post-metadata">

### Author: ![Mactarvish](https://discourse.cmake.org/user_avatar/discourse.cmake.org/mactarvish/32/3674_2.png) [@Mactarvish](https://discourse.cmake.org/u/Mactarvish)
#### Post date: [August 8, 2023, 9:06am UTC](https://discourse.cmake.org/t/find-library-cannot-find-so-when-cross-compiling-arm-under-windows/8676/5 "2023-08-08T09:06:29Z")

</div>

No. `HINTS` works the same with `PATHS`.

---

<div class="post-metadata">

### Author: ![Mactarvish](https://discourse.cmake.org/user_avatar/discourse.cmake.org/mactarvish/32/3674_2.png) [@Mactarvish](https://discourse.cmake.org/u/Mactarvish)
#### Post date: [August 8, 2023, 9:20am UTC](https://discourse.cmake.org/t/find-library-cannot-find-so-when-cross-compiling-arm-under-windows/8676/6 "2023-08-08T09:20:12Z")

</div>

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