Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CMake : FIND_LIBRARY problem

Tags:

find

linker

cmake

My goal is to link the libraries /usr/lib/libboinc_api.a and /usr/lib/libboinc.a through CMake. So I use the examples given in the different FIND_XXXX modules and I try :

    FIND_LIBRARY(BOINC_LIBRARY NAMES libboinc_api libboinc
             DOC "The Boinc libraries")
    MESSAGE(${BOINC_LIBRARY})

But CMake don't find anything.

So I try (with the extensions) :

    FIND_LIBRARY(BOINC_LIBRARY NAMES libboinc_api.a libboinc.a
             DOC "The Boinc libraries")
    MESSAGE(${BOINC_LIBRARY})

and the message gives me /usr/lib/libboinc_api.a.

So my questions are :

1) Why I am forced to precise the extension (in the cmake FIND modules, there is no extension precised) and how to avoid that ?

2) How to link the two files ? (in the current situation, the message says that only the first one is found, but maybe I misunderstand that...)

Thank you very much.

like image 517
Vincent Avatar asked Feb 24 '23 07:02

Vincent


1 Answers

There are several mistakes here: First, the arguments after NAMES will be considered alternative libraries to search for. So if it can't find libboinc_api, it will try libboinc before failing. So you should rather run FIND_LIBRARY twice, one for each library.

Second, you need to either specify the name of the library as it would be supplied to the linker's -l option, i.e instead of libboinc_api you should just say boinc_api, or it's full filename as you did in the second attempt.

In the case of your original attempt, cmake would try to find a liblibboinc_api.so, liblibboinc_api.a, failing that liblibboinc.so, and finally liblibboinc.a.

Try this:

FIND_LIBRARY(BOINC_LIBRARY_API NAMES boinc_api
             DOC "The Boinc API library")
FIND_LIBRARY(BOINC_LIBRARY NAMES boinc
             DOC "The Boinc library")

Possibly in the reverse order.

like image 165
Tore Olsen Avatar answered Mar 12 '23 08:03

Tore Olsen