I am trying to use cmake 3.22.1 to find the Z3 shared library. To start, here is where my Z3 library is located:
ls /usr/lib64 | grep z3
libz3.so.4.8 # Symlink to 4.8.14.0
libz3.so.4.8.14.0
The line of code I’m trying to get to work is:
find_library(Z3_LIB z3)
. I have also tried each of the following:
find_library(Z3_LIB NAMES z3)
find_library(Z3_LIB NAMES libz3)
find_library(Z3_LIB NAMES z3 libz3)
At first my assumption was that find_library
did not know where to look; so I set CMAKE_LIBRARY_PATH
to /usr/lib64
. I tried this with CMAKE_FIND_ROOT_PATH
and CMAKE_SYSTEM_LIBRARY_PATH
.
After that did not work, I tried setting FIND_LIBRARY_USE_LIB64_PATHS
to true.
Then I tried all of the above, with each of the variations of find_library
. When none of those worked I tried:
find_library(Z3_LIB z3 PATHS "${CMAKE_LIBRARY_PATH}")
find_library(Z3_LIB z3 PATHS ${CMAKE_LIBRARY_PATH})
find_library(Z3_LIB z3 HINTS "${CMAKE_LIBRARY_PATH}")
find_library(Z3_LIB z3 HINTS ${CMAKE_LIBRARY_PATH})
I also verified my variables were valid by doing:
message("${CMAKE_LIBRARY_PATH}")
find_library(Z3_LIB z3 PATHS "${CMAKE_LIBRARY_PATH}")
message("${Z3_LIB}")
And the output was:
/usr/lib64
Z3_LIB-NOTFOUND
Also, I double checked to see if this was a copy-past error by copying /usr/lib64 from the output into the command ls /usr/lib64 | grep z3
and I did indeed see the two z3 entries.
Finally, I was able to reproduce this on a different version of cmake (a version of 3.21). As such, I imagine it is user error but I am unable to figure out how. I’ve read through the documentation multiple times now and I don’t see what I’m missing.
None of this worked. I’m trying not to add the .so
or the .4.8
to the find_library
command as I would like this to work cross-platform and not be locked to a specific release of z3. I did try a
find_library(Z3_LIB libz3.so.4.8) with the CMAKE_LIBRARY_PATH
variable set and that did indeed work; however again I’d rather not specify .so
nor 4.8
to allow cross-platform version-invariance. Any help would be appreciated!