【问题标题】:CMake/cygwin and find_library not finding .lib libraryCMake/cygwin 和 find_library 找不到 .lib 库
【发布时间】:2017-05-24 17:58:34
【问题描述】:

我想在我的 cygwin 项目中使用 Bonjour library for Windows。我已经安装了这个库并且我有 dnssd.lib 文件但是 CMake 没有找到这个库。

如果我使用此代码:

  find_path(BONJOUR_PATH dns_sd.h
            PATHS "$ENV{BONJOUR_SDK_HOME}/Include")
    find_library(BONJOUR_LIBRARY
            NAMES dnssd.lib
            PATHS "$ENV{BONJOUR_SDK_HOME}/Lib/x64")
    include_directories(BONJOUR_PATH)

我收到这样的错误消息:

CMake 错误:此项目中使用了以下变量,但是 它们被设置为 NOTFOUND。请设置它们或确保它们已设置 并在 CMake 文件中正确测试:BONJOUR_LIBRARY (ADVANCED)

仅当我将上面的代码包装在 if(CYGWIN) /* code */ endif() 中时才会发生这种情况,但如果我将其包装在 if(WIN32) /* code */ endif() 中,那么它会正确找到库。

为什么会这样?

【问题讨论】:

  • cygwin 导入库是*.dll.a 不是*.lib
  • 但是使用 Bonjour SDK 我已经交付了 *.lib,我该怎么办?我不能将 unix 库与本机 Windows 库混合使用吗?
  • 您不应该混合使用不同的库。或者您使用 Unix 约定或 Windows 约定。混合是多功能的配方。在 64 位上尤其如此,其中数据类型约定也不同。 cygwin.com/cygwin-ug-net/programming.html#gcc-64
  • 但是 dnssd.lib 是第 3 方库,所以我该如何使用?我不能在 cygwin 中使用 3rd 方库吗?
  • Cygwin 有那个库。安装 libdns_sd-devel 包。 cygwin.com/packages/x86_64/libdns_sd-devel/…

标签: c cmake cygwin bonjour


【解决方案1】:

虽然此答案可能不适用于 OP 的具体情况,但我相信它确实适用于该问题。就我而言,我使用的是 cmake 和 Cygwin,但我正在尝试运行一个最初使用 cmake v2.8 在 Linux 上完成的 cmake 项目。就我而言,我使用的是 cmake v3.6.2、Cygwin v2.9.0-2、Windows 10。

为了让 cmake 找到库,我添加了以下语句:

IF (CYGWIN)
  SET (CMAKE_FIND_LIBRARY_PREFIXES "")
  SET (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".LIB" ".dll" ".DLL")
ELSE()
  SET (CMAKE_FIND_LIBRARY_PREFIXES "lib")
  SET (CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
ENDIF (CYGWIN)

请注意,我在所有大写字母中都添加了 lib 和 dll,因为虽然 windows 不区分大小写,但 cmake 是。

感谢 Domen Vrankar 指出前缀问题here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多