Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将curlpp添加到cmake项目 我尝试用CURLCPP和CGUID来帮助C++完成一个项目,但是我不能编译这个项目。_C++_Curl_Cmake_Curlpp - Fatal编程技术网

将curlpp添加到cmake项目 我尝试用CURLCPP和CGUID来帮助C++完成一个项目,但是我不能编译这个项目。

将curlpp添加到cmake项目 我尝试用CURLCPP和CGUID来帮助C++完成一个项目,但是我不能编译这个项目。,c++,curl,cmake,curlpp,C++,Curl,Cmake,Curlpp,我是CMakeLists的新手,很难理解如何添加使项目工作所需的内容。我基本上是照搬我在其他帖子中找到的东西,而没有真正理解它们是如何工作的;教程和文档通常要么太基础,要么太复杂。更糟糕的是,我觉得每个库的添加方式都不一样,所以当有新库要添加时,我唯一要添加的方法就是搜索以前的帖子,询问如何添加。在这种情况下,我找不到任何有助于我的东西 下面是我所做的: 使用自制软件安装curlpp和curl后 brew install curl brew install curlpp 我写我的项目: Cma

我是CMakeLists的新手,很难理解如何添加使项目工作所需的内容。我基本上是照搬我在其他帖子中找到的东西,而没有真正理解它们是如何工作的;教程和文档通常要么太基础,要么太复杂。更糟糕的是,我觉得每个库的添加方式都不一样,所以当有新库要添加时,我唯一要添加的方法就是搜索以前的帖子,询问如何添加。在这种情况下,我找不到任何有助于我的东西

下面是我所做的:

使用自制软件安装curlpp和curl后

brew install curl
brew install curlpp
我写我的项目:

Cmakelists.txt:

cmake_minimum_required(VERSION 3.0)

project(stock_analysis)

set(CMAKE_CXX_FLAGS "-g -Wall -std=c++11")


######## BOOST STUFF ########
#DELETE NEXT LINE
set(Boost_NO_BOOST_CMAKE ON)

# set(Boost_USE_STATIC_LIBS        ON) # only find static libs
# set(Boost_USE_MULTITHREADED      ON)
# set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost COMPONENTS
                   filesystem
)

######## CURL STUFF ########
include(FindCURL)
find_package(CURL REQUIRED)
if(CURL_FOUND)
 message(STATUS "Found CURL version: ${CURL_VERSION_STRING}")
 message(STATUS "Using CURL include dir(s): ${CURL_INCLUDE_DIRS}")
 message(STATUS "Using CURL lib(s): ${CURL_LIBRARIES}")
else()
 message(FATAL_ERROR "Could not find CURL")
endif()




SET(HEADERS
   include
)

SET(SOURCE_FILES
  src/main.cpp
  src/analyse.cpp
  src/helpers.cpp
  src/simulation.cpp
  src/data.cpp
)

include_directories(${HEADERS}
                   ${Boost_INCLUDE_DIRS}
                   ${CURL_INCLUDE_DIRS}
)

add_executable(app ${SOURCE_FILES})

target_link_libraries(app
       ${Boost_LIBRARIES}
       ${CURL_LIBRARIES}
)
data.cpp中的函数(我基本上复制了curlcpp网页中的示例):


顺便说一句,我不明白为什么curlcpp在没有传统的cmakelists符号的情况下从任何地方出现,而没有链接cURL库,但没有链接cURLpp库,因为它与cURL是分开的。@squareskittles我尝试了链接中的信息,但它不起作用。我将编辑该问题以添加错误。我认为您可能希望将库导入CMake,或者至少告诉CMake在哪里查找已安装的库。看看问题的答案。这个解决方案实际上是可行的,但它一点也不优雅,也不便于携带。调用link_目录(/usr/local/cillar/curlpp/0.8.1/lib/),这是安装库的homebrew使编译工作得以进行的地方。然而,我仍然不明白为什么我必须在target_link_libraries curlpp而不是libcurlpp,libcurlpp是库的名称(libcurlpp.a和libcurlpp.dylib可以在路径上找到)@Alexis库curlpp不支持与CMake一起使用,很遗憾。您必须要么向库中添加支持,要么编写一个find模块文件。这两项任务都不容易,但您可以在那里找到更多信息:
#include "data.h"

#include <iostream>

#include <curlpp/cURLpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>

using namespace curlpp::options;


void fetchData(){

  try
    {
    // That's all that is needed to do cleanup of used resources (RAII style).
        curlpp::Cleanup myCleanup;

        // Our request to be sent.
        curlpp::Easy myRequest;

        // Set the URL.
        myRequest.setOpt<Url>("http://example.com");

        // Send request and get a result.
        // By default the result goes to standard output.
        myRequest.perform();
  }

  catch( curlpp::RuntimeError &e )
    {
        std::cout << e.what() << std::endl;
    }

    catch( curlpp::LogicError &e )
    {
        std::cout << e.what() << std::endl;
    }
}
Undefined symbols for architecture x86_64:
  "curlpp::OptionBase::OptionBase(CURLoption)", referenced from:
      curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::Option(CURLoption, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in data.cpp.o
  "curlpp::OptionBase::~OptionBase()", referenced from:
      curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::Option(CURLoption, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in data.cpp.o
      curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::~Option() in data.cpp.o
  "curlpp::UnsetOption::UnsetOption(char const*)", referenced from:
      curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::updateMeToOption(curlpp::OptionBase const&) in data.cpp.o
      curlpp::OptionTrait<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, (CURLoption)10002>::updateHandleToMe(curlpp::internal::CurlHandle*) const in data.cpp.o
      curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::getValue() const in data.cpp.o
  "curlpp::RuntimeError::~RuntimeError()", referenced from:
      curlpp::UnsetOption::~UnsetOption() in data.cpp.o
  "curlpp::libcurlRuntimeAssert(char const*, CURLcode)", referenced from:
      void curlpp::internal::CurlHandle::option<void*>(CURLoption, void*) in data.cpp.o
  "curlpp::Easy::perform()", referenced from:
      StockAnalysis::fetchData(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool const&) in data.cpp.o
  "curlpp::Easy::Easy()", referenced from:
      StockAnalysis::fetchData(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool const&) in data.cpp.o
  "curlpp::Easy::~Easy()", referenced from:
      StockAnalysis::fetchData(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool const&) in data.cpp.o
  "curlpp::Cleanup::Cleanup()", referenced from:
      StockAnalysis::fetchData(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool const&) in data.cpp.o
  "curlpp::Cleanup::~Cleanup()", referenced from:
      StockAnalysis::fetchData(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool const&) in data.cpp.o
  "curlpp::OptionBase::operator<(curlpp::OptionBase const&) const", referenced from:
      vtable for curlpp::OptionTrait<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, (CURLoption)10002> in data.cpp.o
      vtable for curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > in data.cpp.o
  "typeinfo for curlpp::LogicError", referenced from:
      GCC_except_table0 in data.cpp.o
  "typeinfo for curlpp::OptionBase", referenced from:
      curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::updateMeToOption(curlpp::OptionBase const&) in data.cpp.o
      typeinfo for curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > in data.cpp.o
  "typeinfo for curlpp::RuntimeError", referenced from:
      GCC_except_table0 in data.cpp.o
      typeinfo for curlpp::UnsetOption in data.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [app] Error 1
make[1]: *** [CMakeFiles/app.dir/all] Error 2
make: *** [all] Error 2

ld: library not found for -lcurlpp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [app] Error 1
make[1]: *** [CMakeFiles/app.dir/all] Error 2
make: *** [all] Error 2