Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
5 / 5 / 5
Регистрация: 15.05.2012
Сообщений: 66

Настройка удалённой сборки проекта на linux, использующего boost

29.05.2018, 21:03. Показов 1223. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#include <cstdio>
#include <iostream>
#include <vector>
#include <ctime>
#include <string>
#include <boost/date_time.hpp>
#include <boost/locale.hpp>
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
 
using namespace boost::asio;
using namespace boost::posix_time;
using namespace boost::local_time;
 
io_service service;
 
class talk_to_client;
typedef boost::shared_ptr<talk_to_client> client_ptr;
typedef std::vector<client_ptr> array;
array clients;
 
#define MEM_FN(x)       boost::bind(&self_type::x, shared_from_this())
#define MEM_FN1(x,y)    boost::bind(&self_type::x, shared_from_this(),y)
#define MEM_FN2(x,y,z)  boost::bind(&self_type::x, shared_from_this(),y,z)
 
void update_clients_changed();
 
class talk_to_client : public boost::enable_shared_from_this<talk_to_client>, boost::noncopyable
{
    typedef talk_to_client self_type;
    talk_to_client() : sock_(service), started_(false), timer_(service), clients_changed_(false) {  }
 
public:
    typedef boost::system::error_code error_code;
    typedef boost::shared_ptr<talk_to_client> ptr;
 
    void start()
    {
        started_ = true;
        clients.push_back(shared_from_this());
        last_ping = boost::posix_time::microsec_clock::local_time();
        // first, we wait for client to login
        do_read();
    }
    static ptr new_()
    {
        ptr new_(new talk_to_client);
        return new_;
    }
    void stop()
    {
        if (!started_) return;
        started_ = false;
        sock_.close();
 
        ptr self = shared_from_this();
        array::iterator it = std::find(clients.begin(), clients.end(), self);
        clients.erase(it);
        update_clients_changed();
    }
    bool started() const { return started_; }
    ip::tcp::socket & sock() { return sock_; }
    std::string time_zone_name() const { return tzn; }
    void set_clients_changed() { clients_changed_ = true; }
private:
    void on_read(const error_code & err, size_t bytes)
    {
        if (err) stop();
        if (!started()) return;
        // process the msg
        std::string msg(read_buffer_, bytes);
        if (msg.find("Africa/Cairo") == 0) send_time(msg);
        else
        {
            //std::cerr << "invalid msg " << msg << std::endl;
            //stop();
            send_time(msg);
        }
    }
 
    void send_time(const std::string & msg)
    {
        std::istringstream in(msg);
        std::ostringstream ss;
        in >> tzn;
 
 
        tz_database tzDB;
        tzDB.load_from_file("C:/date_time_zonespec.csv");
 
        std::string ms = msg.substr(0, msg.length() - 2);
 
        //ptime timeUTC = second_clock::universal_time();
 
        time_zone_ptr time_zone = tzDB.time_zone_from_region(ms);
 
        //boost::gregorian::date dateObj = timeUTC.date();
 
        //ptime timeUTC = second_clock::universal_time();
 
        local_date_time local_time = local_sec_clock::local_time(time_zone);
 
        ss << local_time.date().day_of_week() << ' '
            << local_time.date().month() << ' '
            << local_time.date().day() << ' '
            << local_time.local_time().time_of_day().hours() << ':'
            << local_time.local_time().time_of_day().minutes() << ':'
            << local_time.local_time().time_of_day().seconds() << ' '
            << ms << ' '
            << local_time.date().year() << std::endl;
 
        std::string c = ss.str();
 
        do_write(c);
 
        stop();
 
        update_clients_changed();
    }
 
    void on_check_ping() {
        boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();
        if ((now - last_ping).total_milliseconds() > 100000)
        {
            std::cout << "stopping " << tzn << " - no ping in time" << std::endl;
            stop();
        }
        last_ping = boost::posix_time::microsec_clock::local_time();
    }
    void post_check_ping()
    {
        timer_.expires_from_now(boost::posix_time::millisec(100000));
        timer_.async_wait(MEM_FN(on_check_ping));
    }
 
 
 
    void on_write(const error_code & err, size_t bytes)
    {
        do_read();
    }
    void do_read() {
        async_read(sock_, buffer(read_buffer_),
            MEM_FN2(read_complete, _1, _2), MEM_FN2(on_read, _1, _2));
        post_check_ping();
    }
    void do_write(const std::string & msg)
    {
        if (!started()) return;
        std::copy(msg.begin(), msg.end(), write_buffer_);
        sock_.async_write_some(buffer(write_buffer_, msg.size()),
            MEM_FN2(on_write, _1, _2));
    }
    size_t read_complete(const boost::system::error_code & err, size_t bytes)
    {
        if (err) return 0;
        bool found = std::find(read_buffer_, read_buffer_ + bytes, '\n') < read_buffer_ + bytes;
        // we read one-by-one until we get to enter, no buffering
        return found ? 0 : 1;
    }
private:
    ip::tcp::socket sock_;
    enum { max_msg = 1024 };
    enum {};
    char read_buffer_[max_msg];
    char write_buffer_[max_msg];
    bool started_;
    std::string tzn;
    deadline_timer timer_;
    boost::posix_time::ptime last_ping;
    bool clients_changed_;
    long long int ltime;
    struct tm newtime;
};
 
void update_clients_changed()
{
    for (array::iterator b = clients.begin(), e = clients.end(); b != e; ++b)
        (*b)->set_clients_changed();
}
 
ip::tcp::acceptor acceptor(service, ip::tcp::endpoint(ip::tcp::v4(), 8001));
 
void handle_accept(talk_to_client::ptr client, const boost::system::error_code & err)
{
    client->start();
    talk_to_client::ptr new_client = talk_to_client::new_();
    acceptor.async_accept(new_client->sock(), boost::bind(handle_accept, new_client, _1));
}
 
 
int main()
{
    talk_to_client::ptr client = talk_to_client::new_(); // присваиваем указателю новый обьект talk_to_client
    acceptor.async_accept(client->sock(), boost::bind(handle_accept, client, _1));
    service.run();
}
И есть такие ошибки

1>------ Сборка начата: проект: ASTL_2, Конфигурация: Debug x64 ------
1>Validating architecture
1>Validating sources
1>Copying sources remotely to '192.168.56.10'
1>Starting remote build
1>Compiling sources:
1>main.cpp
1>Linking objects
1>C:\Users\kLei\source\repos\ASTL_2\ASTL _2\obj\x64\Debug\main.o : error : In function `__static_initialization_and_destruction _0(int, int)':
1>/usr/include/boost/system/error_code.hpp(221): error : undefined reference to `boost::system::generic_category()'
1>/usr/include/boost/system/error_code.hpp(222): error : undefined reference to `boost::system::generic_category()'
1>/usr/include/boost/system/error_code.hpp(223): error : undefined reference to `boost::system::system_category()'
1>C:\Users\kLei\source\repos\ASTL_2\ASTL _2\obj\x64\Debug\main.o : error : In function `boost::system::error_code::error_code() ':
1>/usr/include/boost/system/error_code.hpp(322): error : undefined reference to `boost::system::system_category()'
1>C:\Users\kLei\source\repos\ASTL_2\ASTL _2\obj\x64\Debug\main.o : error : In function `boost::asio::error::get_system_category ()':
1>/usr/include/boost/asio/error.hpp(230): error : undefined reference to `boost::system::system_category()'
1>collect2 : error : ld returned 1 exit status
1>Сборка проекта "ASTL_2.vcxproj" завершена с ошибкой.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Пытаюсь собрать проект на гостевой ubuntu(virtual box) с помощью Visual studio 2017 на хост машине на Windows 10. Настроил удалённую отладку, на гостевой поставил g++, boost lib. Как я понимаю VS не может слинковать проект на гостевой OS, кто с таким сталкивался? весь день парюсь, не могу понять где и как прописать пути что бы компоновщик увидел библиотеки boost. Проекты, не использующие boost нормально компилируются.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.05.2018, 21:03
Ответы с готовыми решениями:

Ошибка сборки проекта с boost | Linux
Доброго времени суток! Не могу собрать проект с использованием boost. Вот ошибки: $ g++ -I /usr/include/boost async.c++ -o async...

[Mono] Ошибка сборки проекта, использующего Bass.Net
Доброе утро друзья) проблема в следующем: Поставил я себе на убунту MonoDevelop -создаю проект -добавляю ссылку на Bass.Net.Linux ...

Некорректная работа проекта использующего dll
Здравствуйте уважаемые обитатели форума. На днях обнаружил странную проблему. Итак, есть некоторый проект который категорически...

3
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
29.05.2018, 22:58
Цитата Сообщение от kLeimor Посмотреть сообщение
Как я понимаю VS не может слинковать проект на гостевой OS, кто с таким сталкивался? весь день парюсь, не могу понять где и как прописать пути что бы компоновщик увидел библиотеки boost.
У меня ваш код собирается
Bash
1
cc/tmp: g++ -g -o file -lboost_system file.cc
Если компановка отдельно
Bash
1
2
gg@/home/gg/cc/tmp: g++ -c -o file.o -g file.cc
gg@/home/gg/cc/tmp: g++ -g -o file -lboost_system file.o
Что писать в студии - не знаю. Хоть на глаза она мне попадается, но своими руками последний раз запускал под Вин 95.
1
5 / 5 / 5
Регистрация: 15.05.2012
Сообщений: 66
30.05.2018, 05:14  [ТС]
у меня под виндой он тоже собирается xD. Просто мне нужно было его на linux скомпилировать, а я всё ещё с ним на "вы", поэтому хотелось что бы VS сам всё делал, без меня=)
0
5 / 5 / 5
Регистрация: 15.05.2012
Сообщений: 66
30.05.2018, 05:54  [ТС]
Правильно говорят - "Утро вечера мудрене́е", 5 минут с утра и всё готово) Вот как настроил
Миниатюры
Настройка удалённой сборки проекта на linux, использующего boost  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2018, 05:54
Помогаю со студенческими работами здесь

Запуск проекта, использующего БД, на чужом компьютере
Добрый день. Есть папка с проектом и ехе файлом. Программа работает с таблицами парадокса. В компонентах программы таблицы указываю в...

Ошибки при компиляции проекта, использующего SFML
Всем привет. Не так давно практикую C++, сегодня решил подключить библиотеку SFML. Все сделал по инструкции, но компилятор выдает сотню...

Ошибка при компиляции проекта, использующего libtcod-net
Приветствую, форумчане. Появляется ошибка при компиляции проекта. Либо пишет это и не дает построить сам проект: Не удалось...

.dll файлы для проекта, использующего postgres (QPSQL)
Всем привет! После сборки проекта &quot;выпуск&quot; я создаю папку и копирую в неё экзешник и все используемые dll файлы. В случае,...

Code::Blocks, ошибки при сборке проекта, использующего OpenGL
Всем привет! У меня вот такие ошибки: ||=== Build: Debug in test6 (compiler: GNU GCC Compiler) ===| obj\Debug\test6Main.o||In...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru