3

给定
ls -lrt /usr/lib/libvpx*结果

lrwxrwxrwx 1 根 15 Feb 9 2012 /usr/lib/libvpx.so.1.0 ->libvpx.so.1.0.0 lrwxrwxrwx
1 根 15 Feb 9 2012 /usr/lib/libvpx.so.1 -> libvpx.so .1.0.0
-rw-r--r-- 1 根 646120 2012 年 2 月 9 日 /usr/lib/libvpx.so.1.0.0

ls -lrt /usr/lib/libschroedinger*结果

lrwxrwxrwx 1 根 2012 年 2 月 8 日 29 /usr/lib/libschroedinger-1.0.so.0 ->libschroedinger-1.0.so.0.11.0
-rw-r--r-- 1 根 774044 2012 年 2 月 8 日 /usr/ lib/libschroedinger-1.0.so.0.11.0

ls -lrt /usr/lib/libgsm*结果

lrwxrwxrwx 1 root root 2009 年 11 月 5 日 /usr/lib/libgsm.so.1 -> libgsm.so.1.0.12
-rw-r--r-- 1 root root 50680 2009 年 11 月 5 日 /usr/lib/libgsm。所以.1.0.12

这是此问题的方法 1 中发现的问题的可能解决方案。您可能/可能不会提及。

可能的解决方案
正如我在父问题中提到的,我们可能需要添加三个find_library()函数。以下是 CMakeLists.txt 的内容

可能的解决方案 1a

find_library(VPX_LIBRARIES NAMES libvpx.so.1 PATHS /usr/lib/)
find_library(SCHROEDINGER_LIBRARIES NAMES libschroedinger-1.0.so.0-1.0 PATHS /usr/lib/) find_library(GSM_LIBRARIES NAMES libgsm.so.1 PATHS /usr/lib / )

target_link_libraries(MyLibraryOrMyExecutable ${VPX_LIBRARIES} ${SCHROEDINGER_LIBRARIES} ${GSM_LIBRARIES} )

可能的解决方案 1b

find_library(VPX_LIBRARIES NAMES vpx PATHS /usr/lib/)
find_library(SCHROEDINGER_LIBRARIES NAMES schroedinger-1.0 PATHS /usr/lib/) find_library(GSM_LIBRARIES NAMES gsm PATHS /usr/lib/)

target_link_libraries(MyLibraryOrMyExecutable ${VPX_LIBRARIES} ${SCHROEDINGER_LIBRARIES} ${GSM_LIBRARIES} )

错误
对于解决方案 1a 和 1b,我得到相同的错误

CMake 错误:此项目中使用了以下变量,但它们设置为 NOTFOUND。请设置它们或确保它们在 CMake 文件中正确设置和测试:

由目录 / someDirectory
中的目标“MyLibraryOrMyExecutable”链接的 GSM_LIBRARIES

SCHROEDINGER_LIBRARIES
由目录 /someDirectory 中的目标“MyLibraryOrMyExecutable”链接

VPX_LIBRARIES
由目录 /someDirectory 中的目标“MyLibraryOrMyExecutable”链接

cmake 在从 find_library() 读取 NAMES 中的 vpx 后查找 libvpx.so,但找到了一个不同的文件,例如 libvpx.so.1,因此我也使用了 1b,我已经给出了确切的名称。但仍然没有运气。

Q如何解决这样的问题,即共享对象的名称在扩展名后还包含一个数字,并且确切的名称与 中给出的名称不匹配find_library()。? 我试图给出确切的名称,这也不起作用

4

1 回答 1

5

命令find_library使用CMAKE_FIND_LIBRARY_SUFFIXESCMAKE_FIND_LIBRARY_PREFIXES变量来粘合真实的库名称。例如:

> cat CMakeLists.txt
message("suffixes: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
message("prefixes: ${CMAKE_FIND_LIBRARY_PREFIXES}")
> cmake -H. -B_builds
suffixes: .so;.a
prefixes: lib

CMAKE_FIND_LIBRARY_SUFFIXES是一个列表变量,您可以添加一个新的后缀:

> cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.17)
find_library(library edata-book-1.2)
message("library: ${library}")
> cmake -H. -B_builds
library: /usr/lib/libedata-book-1.2.so.17

我很确定这里真正的问题是包管理器的使用(:通常 lib<name>.solib<name>.so.N.M文件的符号链接。所以我建议您查看手册并以适当的方式安装您的库。

于 2014-02-11T10:52:32.517 回答