I am trying to run the examples in C++ from the WebRTC source code, using the native API(not building) My Cmakelist is:
cmake_minimum_required(VERSION 3.5)
project(WebRTC)
include_directories("D:/Clion_Projects/src/api")
include_directories("D:/abseil-cpp")
include_directories("D:/CLion_Projects/src/")
add_executable(main examples/peerconnection/server/main.cc)
And the code is:
/*
 *  Copyright 2011 The WebRTC Project Authors. All rights reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#if defined(WEBRTC_POSIX)
#include <sys/select.h>
#endif
#include <time.h>
#include <string>
#include <vector>
#include "absl/flags/flag.h"
#include "absl/flags/parse.h"
#include "absl/flags/usage.h"
#include "examples/peerconnection/server/data_socket.h"
#include "examples/peerconnection/server/peer_channel.h"
#include "system_wrappers/include/field_trial.h"
#include "test/field_trial.h"
ABSL_FLAG(
        std::string,
        force_fieldtrials,
        "",
        "Field trials control experimental features. This flag specifies the field "
        "trials in effect. E.g. running with "
        "--force_fieldtrials=WebRTC-FooFeature/Enabled/ "
        "will assign the group Enabled to field trial WebRTC-FooFeature. Multiple "
        "trials are separated by \"/\"");
ABSL_FLAG(int, port, 8888, "default: 8888");
static const size_t kMaxConnections = (FD_SETSIZE - 2);
void HandleBrowserRequest(DataSocket *ds, bool *quit) {
    assert(ds && ds->valid());
    assert(quit);
    const std::string &path = ds->request_path();
    *quit = (path.compare("/quit") == 0);
    if (*quit) {
        ds->Send("200 OK", true, "text/html", "",
                 "<html><body>Quitting...</body></html>");
    } else if (ds->method() == DataSocket::OPTIONS) {
        // We'll get this when a browsers do cross-resource-sharing requests.
        // The headers to allow cross-origin script support will be set inside
        // Send.
        ds->Send("200 OK", true, "", "", "");
    } else {
        // Here we could write some useful output back to the browser depending on
        // the path.
        printf("Received an invalid request: %s\n", ds->request_path().c_str());
        ds->Send("500 Sorry", true, "text/html", "",
                 "<html><body>Sorry, not yet implemented</body></html>");
    }
}
int main(int argc, char *argv[]) {
    absl::SetProgramUsageMessage(
            "Example usage: ./peerconnection_server --port=8888\n");
    absl::ParseCommandLine(argc, argv);
    // InitFieldTrialsFromString stores the char*, so the char array must outlive
    // the application.
    const std::string force_field_trials = absl::GetFlag(FLAGS_force_fieldtrials);
    webrtc::field_trial::InitFieldTrialsFromString(force_field_trials.c_str());
    int port = absl::GetFlag(FLAGS_port);
    // Abort if the user specifies a port that is outside the allowed
    // range [1, 65535].
    if ((port < 1) || (port > 65535)) {
        printf("Error: %i is not a valid port.\n", port);
        return -1;
    }
    ListeningSocket listener;
    if (!listener.Create()) {
        printf("Failed to create server socket\n");
        return -1;
    } else if (!listener.Listen(port)) {
        printf("Failed to listen on server socket\n");
        return -1;
    }
    printf("Server listening on port %i\n", port);
    PeerChannel clients;
    typedef std::vector<DataSocket *> SocketArray;
    SocketArray sockets;
    bool quit = false;
    while (!quit) {
        fd_set socket_set;
        FD_ZERO(&socket_set);
        if (listener.valid())
            FD_SET(listener.socket(), &socket_set);
        for (SocketArray::iterator i = sockets.begin(); i != sockets.end(); ++i)
            FD_SET((*i)->socket(), &socket_set);
        struct timeval timeout = {10, 0};
        if (select(FD_SETSIZE, &socket_set, NULL, NULL, &timeout) == SOCKET_ERROR) {
            printf("select failed\n");
            break;
        }
        for (SocketArray::iterator i = sockets.begin(); i != sockets.end(); ++i) {
            DataSocket *s = *i;
            bool socket_done = true;
            if (FD_ISSET(s->socket(), &socket_set)) {
                if (s->OnDataAvailable(&socket_done) && s->request_received()) {
                    ChannelMember *member = clients.Lookup(s);
                    if (member || PeerChannel::IsPeerConnection(s)) {
                        if (!member) {
                            if (s->PathEquals("/sign_in")) {
                                clients.AddMember(s);
                            } else {
                                printf("No member found for: %s\n", s->request_path().c_str());
                                s->Send("500 Error", true, "text/plain", "",
                                        "Peer most likely gone.");
                            }
                        } else if (member->is_wait_request(s)) {
                            // no need to do anything.
                            socket_done = false;
                        } else {
                            ChannelMember *target = clients.IsTargetedRequest(s);
                            if (target) {
                                member->ForwardRequestToPeer(s, target);
                            } else if (s->PathEquals("/sign_out")) {
                                s->Send("200 OK", true, "text/plain", "", "");
                            } else {
                                printf("Couldn't find target for request: %s\n",
                                       s->request_path().c_str());
                                s->Send("500 Error", true, "text/plain", "",
                                        "Peer most likely gone.");
                            }
                        }
                    } else {
                        HandleBrowserRequest(s, &quit);
                        if (quit) {
                            printf("Quitting...\n");
                            FD_CLR(listener.socket(), &socket_set);
                            listener.Close();
                            clients.CloseAll();
                        }
                    }
                }
            } else {
                socket_done = false;
            }
            if (socket_done) {
                printf("Disconnecting socket\n");
                clients.OnClosing(s);
                assert(s->valid());  // Close must not have been called yet.
                FD_CLR(s->socket(), &socket_set);
                delete (*i);
                i = sockets.erase(i);
                if (i == sockets.end())
                    break;
            }
        }
        clients.CheckForTimeout();
        if (FD_ISSET(listener.socket(), &socket_set)) {
            DataSocket *s = listener.Accept();
            if (sockets.size() >= kMaxConnections) {
                delete s;  // sorry, that's all we can take.
                printf("Connection limit reached\n");
            } else {
                sockets.push_back(s);
                printf("New connection...\n");
            }
        }
    }
    for (SocketArray::iterator i = sockets.begin(); i != sockets.end(); ++i)
        delete (*i);
    sockets.clear();
    return 0;
}
But even after configuring the CmakeList I run into these errors:
Scanning dependencies of target main
[ 50%] Building CXX object CMakeFiles/main.dir/examples/peerconnection/server/main.cc.obj
[100%] Linking CXX executable main.exe
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `HandleBrowserRequest(DataSocket*, bool*)':
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:55: undefined reference to `DataSocket::Send(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:61: undefined reference to `DataSocket::Send(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:66: undefined reference to `DataSocket::Send(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `main':
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:72: undefined reference to `absl::SetProgramUsageMessage(absl::string_view)'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:74: undefined reference to `absl::ParseCommandLine(int, char**)'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:79: undefined reference to `webrtc::field_trial::InitFieldTrialsFromString(char const*)'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:91: undefined reference to `SocketBase::Create()'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:94: undefined reference to `ListeningSocket::Listen(unsigned short)'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:115: undefined reference to `__imp_select'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:123: undefined reference to `__WSAFDIsSet'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:124: undefined reference to `DataSocket::OnDataAvailable(bool*)'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:125: undefined reference to `PeerChannel::Lookup(DataSocket*) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:126: undefined reference to `PeerChannel::IsPeerConnection(DataSocket const*)'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:128: undefined reference to `DataSocket::PathEquals(char const*) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:129: undefined reference to `PeerChannel::AddMember(DataSocket*)'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:132: undefined reference to `DataSocket::Send(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:135: undefined reference to `ChannelMember::is_wait_request(DataSocket*) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:139: undefined reference to `PeerChannel::IsTargetedRequest(DataSocket const*) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:141: undefined reference to `ChannelMember::ForwardRequestToPeer(DataSocket*, ChannelMember*)'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:142: undefined reference to `DataSocket::PathEquals(char const*) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:143: undefined reference to `DataSocket::Send(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:147: undefined reference to `DataSocket::Send(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:156: undefined reference to `SocketBase::Close()'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:157: undefined reference to `PeerChannel::CloseAll()'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:167: undefined reference to `PeerChannel::OnClosing(DataSocket*)'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:177: undefined reference to `PeerChannel::CheckForTimeout()'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:179: undefined reference to `__WSAFDIsSet'
D:/CLion_Projects/src/examples/peerconnection/server/main.cc:180: undefined reference to `ListeningSocket::Accept() const'
CMakeFiles\main.dir/objects.a(main.cc.obj):main.cc:(.data+0x0): undefined reference to `vtable for absl::flags_internal::FlagImpl'
CMakeFiles\main.dir/objects.a(main.cc.obj):D:/CLion_Projects/src/examples/peerconnection/server/main.cc:42: undefined reference to `vtable for absl::flags_internal::FlagImpl'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `SocketBase::~SocketBase()':
D:/CLion_Projects/src/examples/peerconnection/server/data_socket.h:40: undefined reference to `SocketBase::Close()'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `PeerChannel::~PeerChannel()':
D:/CLion_Projects/src/examples/peerconnection/server/peer_channel.h:75: undefined reference to `PeerChannel::DeleteAll()'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `absl::flags_internal::FlagRegistrar<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, true>::FlagRegistrar(absl::flags_internal::Flag<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, char const*)':
D:/abseil-cpp/absl/flags/internal/flag.h:726: undefined reference to `absl::flags_internal::RegisterCommandLineFlag(absl::CommandLineFlag&, char const*)'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `absl::flags_internal::FlagRegistrar<int, true>::FlagRegistrar(absl::flags_internal::Flag<int>&, char const*)':
D:/abseil-cpp/absl/flags/internal/flag.h:726: undefined reference to `absl::flags_internal::RegisterCommandLineFlag(absl::CommandLineFlag&, char const*)'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > absl::UnparseFlag<int>(int const&)':
D:/abseil-cpp/absl/flags/marshalling.h:251: undefined reference to `absl::flags_internal::Unparse[abi:cxx11](int)'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `bool absl::flags_internal::InvokeParseFlag<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(absl::string_view, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)':
D:/abseil-cpp/absl/flags/marshalling.h:195: undefined reference to `absl::flags_internal::AbslParseFlag(absl::string_view, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > absl::flags_internal::Unparse<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
D:/abseil-cpp/absl/flags/marshalling.h:208: undefined reference to `absl::flags_internal::AbslUnparseFlag[abi:cxx11](absl::string_view)'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `bool absl::flags_internal::InvokeParseFlag<int>(absl::string_view, int*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)':
D:/abseil-cpp/absl/flags/marshalling.h:195: undefined reference to `absl::flags_internal::AbslParseFlag(absl::string_view, int*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `absl::flags_internal::Flag<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Get() const':
D:/abseil-cpp/absl/flags/internal/flag.h:618: undefined reference to `absl::flags_internal::FlagImpl::AssertValidType(void const*, std::type_info const* (*)()) const'
D:/abseil-cpp/absl/flags/internal/flag.h:622: undefined reference to `absl::flags_internal::FlagImpl::Read(void*) const'
CMakeFiles\main.dir/objects.a(main.cc.obj): In function `absl::flags_internal::Flag<int>::Get() const':
D:/abseil-cpp/absl/flags/internal/flag.h:618: undefined reference to `absl::flags_internal::FlagImpl::AssertValidType(void const*, std::type_info const* (*)()) const'
D:/abseil-cpp/absl/flags/internal/flag.h:622: undefined reference to `absl::flags_internal::FlagImpl::Read(void*) const'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [CMakeFiles\main.dir\build.make:106: main.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:95: CMakeFiles/main.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:102: CMakeFiles/main.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:137: main] Error 2
I don't understand why I am getting these errors, since I am running the example as is from the repo. Any help would be greatly appreciated!
