CMake:FIND_LIBRARY问题

时间:2011-08-10 22:04:55

标签: linker find cmake

我的目标是通过CMake链接库/usr/lib/libboinc_api.a和/usr/lib/libboinc.a。 所以我使用不同FIND_XXXX模块中给出的示例,然后尝试:

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

但是CMake没有找到任何东西。

所以我尝试(使用扩展名):

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

并且该消息为我提供了 /usr/lib/libboinc_api.a

所以我的问题是:

1)为什么我被迫精确扩展(在cmake FIND模块中,没有精确的扩展)以及如何避免扩展?

2)如何链接这两个文件? (在目前的情况下,消息说只找到第一个,但也许我误解了......)

非常感谢。

1 个答案:

答案 0 :(得分:8)

这里有几个错误:首先,NAMES之后的参数将被视为要搜索的替代库。所以如果找不到libboinc_api,它会在失败之前尝试libboinc。所以你应该两次运行FIND_LIBRARY,每个库运行一次。

其次,您需要指定库的名称,因为它将提供给链接器的-l选项,即您应该只使用boinc_api而不是libboinc_api,或者它是第二次尝试时的完整文件名。 / p>

在您最初尝试的情况下,cmake会尝试找到liblibboinc_api.so,liblibboinc_api.a,失败了liblibboinc.so,最后是liblibboinc.a。

试试这个:

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

可能是相反的顺序。