gpt4 book ai didi

dll - find_library 选择静态库而不是共享库

转载 作者:行者123 更新时间:2023-12-05 06:41:41 27 4
gpt4 key购买 nike

has been asked on SO before甚至还有 a related bug on this in CMAKE .但是,我的问题是变体,答案不明确。

我的问题是我正在使用 MinGW 在 Linux 上针对 Windows 进行交叉编译。对于 DLL libGLESv2.dlliconv,静态库的命名方式如下 libGLESv2.dll.alibiconv.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/name2dir2/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.sodir2/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/

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