find_library 如何处理版本号?

usr*_*567 5 cmake

CMake 如何find_library处理“libFOO.so.3.2”中的版本号?有些库具有从 libFOO.so 到正确版本的符号链接,有些则没有。

当我只使用时,CMake 是否找到没有符号链接的库find_library(NAMES FOO)
我应该怎么做才能帮助 CMake 找到合适的库?

mar*_*son 4

假设是linux发行版,系统包管理器一般会提供运行时包和开发包。如果你已经安装了某个库的开发包(例如libFOO-dev),它通常会在你的/usr/lib或/usr/local/lib中包含以下三个文件

libFOO.so.3.2.0 (the versioned binary)
libFOO.so.3 (soname = symlink to versioned binary)
libFOO.so (namelink = symlink to soname)
Run Code Online (Sandbox Code Playgroud)

名称链接的文件名中没有版本详细信息。这将用于通过链接器命令行选项查找库,例如 -lFOO

您应该在 find_library cmake 命令中使用名称链接(例如 FOO)。

链接器会将 soname 文件嵌入到您的二进制文件中。

如果您安装了该库的多个版本,请确保将 namelink 文件符号链接到您要使用的 soname 文件。如果您安装了同一库的多个主要版本,这实际上只是一个问题。在主要版本中,API 应该向后兼容。