Search code examples
cmakeshared-librariesstatic-linking

How can I find a library name of .so file?


For example, I have libprofiler.so file. How can I get name of this shared object like this:

getname /usr/lib/libprofiler.so

I want to do it because it is required for CMakeLists.txt in

target_link_libraries(MyProject name_of_library)

Solution

  • Do the following steps to link an existing lib to your target:

    1. Inform you which lib do you need: here profiler.
    2. Build the name of the lib. CMake does not really needs this but it is worth to know: Example on Unix/Linux lib + NAME + [.so|.a] [VERSION]. Here: libprofiler.so.
    3. In your CMakeLists.txt:

      find_library(LIB_PROFILER NAMES profiler libprofiler.so libprofiler.so.V123)
      add_executable(MyApp ${SOURCES})
      target_link_libraries(MyApp ${LIB_PROFILER})
      

      The code above tries to find a lib and checks the following name profiler, libprofiler.so and libprofiler.so.V123. If found, the variable LIB_PROFILER points to the lib file. Use the variable as one of the files linked to your target.

    In your code, you also missed the ${} around the variable.