gpt4 book ai didi

cmake - .so 之后是数字,如何在 cmake 的 find_library 中匹配它们?链接作为子依赖项的共享对象时出错

转载 作者:行者123 更新时间:2023-12-02 01:59:43 25 4
gpt4 key购买 nike

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

lrwxrwxrwx 1 root root 15 Feb 9 2012 /usr/lib/libvpx.so.1.0 ->libvpx.so.1.0.0
lrwxrwxrwx 1 root root 15 Feb 9 2012 /usr/lib/libvpx.so.1 -> libvpx.so.1.0.0
-rw-r--r-- 1 root root 646120 Feb 9 2012 /usr/lib/libvpx.so.1.0.0

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

lrwxrwxrwx 1 root root 29 Feb 8 2012 /usr/lib/libschroedinger-1.0.so.0 ->libschroedinger-1.0.so.0.11.0
-rw-r--r-- 1 root root 774044 Feb 8 2012 /usr/lib/libschroedinger-1.0.so.0.11.0

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

lrwxrwxrwx 1 root root 16 Nov 5 2009 /usr/lib/libgsm.so.1 -> libgsm.so.1.0.12
-rw-r--r-- 1 root root 50680 Nov 5 2009 /usr/lib/libgsm.so.1.0.12

这是对 this question 的方法 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 Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files:

GSM_LIBRARIES
linked by target "MyLibraryOrMyExecutable" in directory /someDirectory

SCHROEDINGER_LIBRARIES
linked by target "MyLibraryOrMyExecutable" in directory /someDirectory

VPX_LIBRARIES
linked by target "MyLibraryOrMyExecutable" in directory /someDirectory

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

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

最佳答案

命令 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 的符号链接(symbolic link)文件。所以我建议你查看手册并以适当的方式安装您的库。

关于cmake - .so 之后是数字,如何在 cmake 的 find_library 中匹配它们?链接作为子依赖项的共享对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17880532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com