- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这has been asked on SO before甚至还有 a related bug on this in CMAKE .但是,我的问题是变体,答案不明确。
我的问题是我正在使用 MinGW 在 Linux 上针对 Windows 进行交叉编译。对于 DLL libGLESv2.dll
和 iconv,静态库的命名方式如下
分别。libGLESv2.dll.a
和 libiconv.dll.a
。 dll
例子:
find_library(FOUND_LIB_X NAMES "zlib1.dll" PATHS ${CMAKE_FIND_ROOT_PATH}/bin/)
finds this: zlib1.dll
find_library(FOUND_LIB_Y NAMES "libGLESv2.dll" PATHS ${CMAKE_FIND_ROOT_PATH}/bin/)
finds this: libGLESv2.dll.a
find_library(FOUND_LIB_Y NAMES "iconv.dll" PATHS ${CMAKE_FIND_ROOT_PATH}/bin/)
finds this: libiconv.dll.a
The CMAKE bug似乎指的是静态库被命名为 blah.lib (Windows) 或 blah.a (Linux) 的传统情况。在 Linux 上使用 mingw 的这种交叉编译器情况下,它们被命名为 blah.dll.a
我需要它来找到字面上名为 iconv.dll
的文件,除此之外别无其他。如果它没有真正找到它,则中止。我使用了错误的 CMAKE 函数吗? (不使用 find_library()
吗?)
最佳答案
CMake 在搜索库时在迭代库名称和目录之间使用确定的顺序。例如,根据 documentation ,
When more than one value is given to the NAMES option this command by default will consider one name at a time and search every directory for it.
也就是说,库位于 dir1/name2
和 dir2/name1
find_library(MYLIB NAMES name1 name2 PATHS dir1 dir2)
message(${MYLIB})
将打印 dir2/name1
.
指定 NAMES_PER_DIR 选项反转选择:
find_library(MYLIB NAMES name1 name2 NAMES_PER_DIR PATHS dir1 dir2)
message(${MYLIB})
将打印 dir1/name2
.
尝试库的前缀和后缀的情况有所不同:
Each library name given to the NAMES option is first considered as a library file name and then considered with platform-specific prefixes (e.g. lib) and suffixes (e.g. .so).
似乎正在检查 lib<name>.so
在 <name>
之后立即执行迭代目录时。
也就是说,库位于 dir1/libname.so
和 dir2/name
find_library(MYLIB NAMES name PATHS dir1 dir2)
message(${MYLIB})
将打印 dir1/libname.so
.
这就是为什么 libiconv.dll.a
在您的案例中找到:lib/
在 find_library
的第 5 步搜索目录作为系统特定路径搜索算法,但目录 bin/
,指定为 PATH 选项,仅在第 6 步搜索。
找到所需内容的最简单方法是使用 NO_DEFAULT_PATH 选项,因此在 lib/
中搜索根本不会执行:
find_library(FOUND_LIB_Y
NAMES "iconv.dll"
PATHS ${CMAKE_FIND_ROOT_PATH}/bin/
NO_DEFAULT_PATH
)
关于dll - find_library 选择静态库而不是共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39687754/
这has been asked on SO before甚至还有 a related bug on this in CMAKE .但是,我的问题是变体,答案不明确。 我的问题是我正在使用 MinGW
一指定find_library( name PATHS path1..pathn) 我的问题是如何find_library()将名称与库文件匹配(在 Windows 和 Linux 上)? 例如,我无
CMake的find_library如何处理“libFOO.so.3.2”中的版本号?有些库有从 libFOO.so 到正确版本的符号链接(symbolic link),有些则没有。 当我只使用 fi
在我的项目中,我使用了 differend 3rd 库,这些库已经预先构建并添加到 external-debs 子目录中。我使用多个 FindXXX CMake 脚本来定位这些需求。 当我尝试定位 F
我想出了以下 super 简单的 FindMAGMA.cmake 脚本来查找 MAGMA 库,因为周围没有: # - Find the MAGMA library # # Usage: # fin
是否可以调试find_library来自 CMake? 我想要的是经过考虑的路径列表。我的用例是一个像 find_library (FOO_LIBRARY NAMES fo
我的目标是通过 CMake 链接库/usr/lib/libboinc_api.a 和/usr/lib/libboinc.a。因此,我使用不同 FIND_XXXX 模块中给出的示例并尝试: FI
我目前正在创建一组应该在 使用 CLion 的不同项目。我的问题是如何实现这个 功能。 到目前为止,我研究了以下相关问题 这并没有真正解决我的问题: CMake link to external li
在我的 CMake 脚本中,我必须链接到一个库,该库可以有两个不同的名称,具体取决于缓存变量。 库可以是 libMyLibrary.a 或 libMyLibraryCUDA.a,具体取决于 CUDA_
我正在尝试使用来自 ctypes 的命令 find_library() 但我收到一个错误,我不明白它的原因。我在 Windows 上工作 这是代码: import ctypes from ctypes
我目前正在尝试让 CMake 为我的项目运行(在 Windows 上)。我想使用安装所有库的自定义位置。为了让 CMake 知道这条路径,我尝试这样做: set(CMAKE_PREFIX_PATH D
我正在使用 CMake 2.8.2版本。该项目使用了大量外部文件和自定义库(无法通过 find_package 获得),并且有一长串元素,如下所示: find_path(XXX_INCLUDE_DIR
在 cmake 的 find_library 函数的文档中,我们有 The CMake variable CMAKE_FIND_ROOT_PATH specifies one or more dire
这个问题在这里已经有了答案: How to strip trailing whitespace in CMake variable? (4 个回答) 4年前关闭。 我的 CMakeLists.txt
尽管阅读了文档,但我无法弄清楚 CMake 的命令是否为 find_library是否搜索 LD_LIBRARY_PATH 中列出的目录。 我的测试给出了不同的结果。 最佳答案 来自文档(我没有转载与
我用了 list存储库的名称,我想使用 foreach和 find_library找到每个库的完整路径。但是find_library刚刚返回第一个库的路径。我查了 this post ,但问题依然存在
我有一个名为 mylib 的 catkin 库,我用 catkin build 构建了它此外,我有一个节点,其中使用了该库中的函数。我像往常一样在节点的 CMakeLists.txt 中启用此链接:
我在默认安装了 glew 1.10 的 Ubuntu 14.04 上。我想使用最新的 glew 1.13,但是 sudo apt-get remove libglew1.10 不是一个选项,因为 ub
我正在尝试学习 CMake。我有《掌握 CMake》一书,我正在尝试完成我的第一个“简单”教程。 Using CMake: Hello World Example 我顺利地完成了第一部分,但是当我尝试
[注意:这几乎是 Linking to a library that hasn't been built yet with CMake 的副本, 但在这种情况下,未构建的库来自 ADD_CUSTOM_
我是一名优秀的程序员,十分优秀!