【问题标题】:Setting up curl library path in cmake在 cmake 中设置 curl 库路径
【发布时间】:2014-12-29 13:00:16
【问题描述】:

我下载了“curl 库”用于第三方应用程序。当我运行包含的 cmake 文件时,出现以下错误。请帮我。我很感激:

> The C compiler identification is MSVC 18.0.30501.0
    >     The CXX compiler identification is MSVC 18.0.30501.0
    >     Check for working C compiler using: Visual Studio 12 2013
    >     Check for working C compiler using: Visual Studio 12 2013 -- works
    >     Detecting C compiler ABI info
    >     Detecting C compiler ABI info - done
    >     Check for working CXX compiler using: Visual Studio 12 2013
    >     Check for working CXX compiler using: Visual Studio 12 2013 -- works
    >     Detecting CXX compiler ABI info
    >     Detecting CXX compiler ABI info - done
    >     Could NOT find CURL (missing:  CURL_LIBRARY) (found version "7.38.0")
    >     CMake Error at CMakeLists.txt:49 (MESSAGE):
    >       Could not find the CURL library and development files.  
    >     
    >     Configuring incomplete, errors occurred!
    >     See also "C:/BUILD/CMakeFiles/CMakeOutput.log".

我在 Windows 中将“CURL_LIBRARY”的环境变量设置为指向 curl 库文件的安装位置,但 cmake 仍然无法找到它,即使它表明在我的系统上检测到版本 7.38.0。

感谢您的帮助..

编辑: cMakeLists.txt 文件

  ...
# Look for required libraries
SET(requiredlibs)

FIND_PACKAGE(CURL)
IF(CURL_FOUND)
  INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
  SET(requiredlibs ${requiredlibs} ${CURL_LIBRARIES} )
ELSE(CURL_FOUND)
  MESSAGE(FATAL_ERROR "Could not find the CURL library and development files.")
ENDIF(CURL_FOUND)
   ...

我在 Windows 环境变量中设置了 include 和 lib 目录,但没有改变。

编辑: 这是完整的项目文件:cmake project

【问题讨论】:

  • 可能需要特定版本,而 7.38.0 是新版本。由于潜在的不兼容,许多项目不接受太新的版本。查看发行说明或 cmake 文件是否可以确定它是否查找特定版本范围。
  • 展示你的CMakeLists.txt,尤其是带有find_package的部分
  • @Oncaphillis:没有关于版本范围的信息。 curl 站点也不提供可下载的较低版本。
  • 看看FindCURL.cmake 模块:它没有使用任何$ENV!那么,您为什么认为它应该检查您的环境?
  • FindCURL.cmake 使用“纯”find_library() 来获取库。所以请阅读 [documentation](file:///usr/share/doc/cmake/command/find_library.html) 并尝试通过“标准”环境变量给出适当的提示。

标签: windows curl cmake libcurl


【解决方案1】:

通过 pkgconfig

include(FindPkgConfig)
pkg_check_modules(CURL libcurl REQUIRED)
include_directories(
  SYSTEM ${CURL_INCLUDE_DIRS}
)
target_link_libraries(YOURTARGETNAME
  ${CURL_LIBRARIES}
)

【讨论】:

    【解决方案2】:

    您应该首先使用以下 cmd 安装 libcurl-dev pkg:

    $ yum search libcurl
    
    Loading mirror speeds from cached hostfile
    ============================= N/S Matched: libcurl =============================
    libcurl-devel.i686 : Files needed for building applications with libcurl
    libcurl-devel.x86_64 : Files needed for building applications with libcurl
    curlftpfs.x86_64 : CurlFtpFS is a filesystem for accessing FTP hosts based on
                     : FUSE and libcurl
    curlpp.i686 : A C++ wrapper for libcURL
    curlpp.x86_64 : A C++ wrapper for libcURL
    libcurl.i686 : A library for getting files from web servers
    libcurl.x86_64 : A library for getting files from web servers
    perl-WWW-Curl.x86_64 : Perl extension interface for libcurl
    python-pycurl.x86_64 : A Python interface to libcurl
    rubygem-curb.x86_64 : Ruby libcurl bindings
    

    然后安装可用的 pkg

    sudu yum install libcurl-devel.x86_64
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,这个 SO 问题是我搜索过程中的热门问题之一。 所以我给出了我找到的解决方案。以下 cmake 对我有用,可以在我的代码中使用 libcurl 包含。 希望它对某人有用。

      set(CURL_LIBRARY "-lcurl") 
      find_package(CURL REQUIRED) 
      add_executable (curl-demo convert.cpp)
      include_directories(${CURL_INCLUDE_DIR})
      target_link_libraries(curl-demo ${CURL_LIBRARIES})
      

      【讨论】:

      • 为我工作谢谢。它从哪里获得 CURL_INCLUDE_DIR 和 CURL_LIBRARIES 变量??
      • 这些变量由 find_packages 模块设置
      • 非常感谢!这创造了奇迹。我想知道set(CURL_LIBRARY "-lcurl") 的用途是什么。变量 CURL_LIBRARY 似乎没有在任何地方使用?
      猜你喜欢
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多