jgaa / restc-cpp

Modern C++ REST Client library
MIT License
615 stars 95 forks source link

Cannot find path. Unable to use restc-cpp #46

Closed privateOmega closed 6 years ago

privateOmega commented 6 years ago

Using the example program `#include

include "restc-cpp/restc-cpp.h"

using namespace std; using namespace restc_cpp;

void DoSomethingInteresting(Context& ctx) { // Here we are in a co-routine, running in a worker-thread.

// Asynchronously connect to a server and fetch some data.
auto reply = ctx.Get("http://jsonplaceholder.typicode.com/posts/1");

// Asynchronously fetch the entire data-set and return it as a string.
auto json = reply->GetBodyAsString();

// Just dump the data.
cout << "Received data: " << json << endl;

}

int main() { auto rest_client = RestClient::Create();

// Call DoSomethingInteresting as a co-routine in a worker-thread.
rest_client->Process(DoSomethingInteresting);

// Wait for the coroutine to finish, then close the client.
rest_client->CloseWhenReady(true);

} ` VSCode shows #include errors detected. Please update your includePath. IntelliSense features for this translation unit (/home/kiran/dave/src/rest-client.cpp) will be provided by the Tag Parser. cannot open source file "restc-cpp/restc-cpp.h"

I have followed the build instructions for ubuntu to the letter. `sudo apt-get install zlib1g-dev g++ cmake doxygen graphviz libboost-all-dev libssl-dev

git clone https://github.com/jgaa/restc-cpp.git cd restc-cpp/ mkdir dbuild cd dbuild cmake .. make`

jgaa commented 6 years ago

I think you need to add the include-paths. The simplest way is probably to make the library and then "sudo make install" it. That will copy the headers to /usr/local/include. Then you just have to make sure that VSCode look for includes in /usr/local/include.

There are examples on how to link a project in the examples folder, both with cmake and from the command line.

privateOmega commented 6 years ago

@jgaa What happened after sudo make install

`Scanning dependencies of target redirect_tests [ 95%] Building CXX object tests/functional/CMakeFiles/redirect_tests.dir/RedirectTests.cpp.o [ 97%] Linking CXX executable redirect_tests [ 97%] Built target redirect_tests Scanning dependencies of target logip [ 98%] Building CXX object examples/logip/CMakeFiles/logip.dir/logip.cpp.o [100%] Linking CXX executable logip [100%] Built target logip Install the project... -- Install configuration: "" CMake Error at cmake_install.cmake:36 (file): file INSTALL cannot find "/home/kiran/restc-cpp/dbuild/external-projects/installed/include/rapidjson".

Makefile:126: recipe for target 'install' failed make: *** [install] Error 1 `

jgaa commented 6 years ago

The rapidjson headers are there, if not, restc-cpp would no build. But something is broken. I'll add the install and compilation of the test programs to the automated tests and see if I can reproduce the problem. What operating system are you using?

privateOmega commented 6 years ago

I've tried the same on Ubuntu 16.04 and 14.04

jgaa commented 6 years ago

I found the problem. I changed the way i handle the external rapidjson project in cmake a while ago. My automated tests passed, and I never tested the 'make install' after that.

I have committed a fix to the master branch.

privateOmega commented 6 years ago

Thanks @jgaa I will try it out.

privateOmega commented 6 years ago

@jgaa It worked like a charm. Appreciate it. Just some things on my mind that need your expertise. Are all the library linking necessary? Which all can be avoided? I am asking out of curiosity and the next thing is how can I disable the tracing. It kind of hogs my screen.

jgaa commented 6 years ago

You will probably need all the libraries for any production build. The boost libraries are required for both IO, json serialization, logging and coroutines.

You can avoid zlib by calling cmake with -DRESTC_CPP_WITH_ZLIB=OFF

You can avoid openssl by calling cmake with -DRESTC_CPP_WITH_TLS=OFF

To relax the logging, just put the log-level you want in your main function

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>

int main( int argc, char * argv[] )
{
    namespace logging = boost::log;
    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::debug
    );

If debug is too verbose, you may use info or warning in stead.