Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
Lictor
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 69
Завершенные тесты: 1
#1

Ошибка при компиляции Boost - C++ Linux

11.10.2017, 16:43. Просмотров 257. Ответов 11
Метки нет (Все метки)

Добрый день.

Для передачи данных с компьютера на Ардуино решил написать программу на С++. Для этого установил полную библиотеку Boost, как написано на этом сайте.

Установка прошла без проблем, далее в Eclipse прописал пути к заголовкам и библиотекам.
Но при попытке сборки кода-примера с оф. сайта Boost
(я ведь правильно понимаю, что этот код позволяет принимать сообщения с СОМ порта?)

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
//
// blocking_tcp_echo_client.cpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
 
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <boost/asio.hpp>
 
using boost::asio::ip::tcp;
 
enum { max_length = 1024 };
 
int main(int argc, char* argv[])
{
  try
  {
    if (argc != 3)
    {
      std::cerr << "Usage: blocking_tcp_echo_client <host> <port>\n";
      return 1;
    }
 
    boost::asio::io_service io_service;
 
    tcp::socket s(io_service);
    tcp::resolver resolver(io_service);
    boost::asio::connect(s, resolver.resolve({argv[1], argv[2]}));
 
    std::cout << "Enter message: ";
    char request[max_length];
    std::cin.getline(request, max_length);
    size_t request_length = std::strlen(request);
    boost::asio::write(s, boost::asio::buffer(request, request_length));
 
    char reply[max_length];
    size_t reply_length = boost::asio::read(s,
        boost::asio::buffer(reply, request_length));
    std::cout << "Reply is: ";
    std::cout.write(reply, reply_length);
    std::cout << "\n";
  }
  catch (std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }
 
  return 0;
}
Но при компиляции возникает ошибка, см. приложение.

После поиска в интернете я решил, что это ошибка при сборке перед установкой, но дело в том, что я вообще не собирал библиотеку, она была в архиве. Подскажите, как это можно исправить?
http://www.cyberforum.ru/cpp-linux/thread2112298.html
0
Миниатюры
Ошибка при компиляции Boost  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2017, 16:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка при компиляции Boost (C++ Linux):

Ошибка при компиляции в Code::Blocks
Помогите решить ошибки при компиляции Код: main.cpp #include...

Ошибка сегментирования при компиляции
Когда компилирую через g++ компилируется, при запуске выдает ошибку...

Ошибка компиляции
Дана задача с использованием friend-ов. Не могу понять почему программа не...

Ошибка пи компиляции
Выполняю лабу, вот ее задание Написал вот такой код #include &lt;dirent.h&gt;...

Ошибка компиляции CharLower
Какой инклуд надо включить, что бы при компиляции не выбивало ошибку, что...

11
AlexVRud
477 / 189 / 72
Регистрация: 04.07.2014
Сообщений: 530
11.10.2017, 22:40 #2
Ты используешь библиотеку, а значит должен указать:
  • Пути до заголовочных файлов: директория .../include и ключ -I.
  • Пути до объектных (бинарных) файлов: директория .../lib и ключ -L.
  • Конкретные объектные файлы: ключ -l.
В твоём случае, например, -l boost_system -l boost_thread

Добавлено через 2 минуты
Цитата Сообщение от Lictor Посмотреть сообщение
, но дело в том, что я вообще не собирал библиотеку,
Но ты же делал:

Bash
1
2
sudo ./bootstrap.sh --prefix=/usr/local
sudo ./b2 install
0
Lictor
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 69
Завершенные тесты: 1
12.10.2017, 17:22  [ТС] #3
Благодарю за ответ!
Уверен, что он мне мог бы помочь,если бы не одно но... я не понимаю куда мне вставить Вашу строку.
Прочел пару сайтов об установке программ на линукс (раз два и т.п.), но не полегчало.
Напишите, пожалуйста, как мне нужно сделать.
0
Croessmah
++Ͻ
14156 / 8081 / 1513
Регистрация: 27.09.2012
Сообщений: 19,920
Записей в блоге: 3
Завершенные тесты: 1
12.10.2017, 17:30 #4
Цитата Сообщение от Lictor Посмотреть сообщение
я ведь правильно понимаю, что этот код позволяет принимать сообщения с СОМ порта?
Нет. У Вас TCP-соединение.
В коде, который я Вам давал
используется boost::asio::serial_port
для соединения с Ардуино.
Там же можете подсмотреть настройки соединения.
0
Lictor
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 69
Завершенные тесты: 1
12.10.2017, 20:15  [ТС] #5
Croessmah, я обязательно попробую ваш код, как только смогу запустить библиотеку
0
Croessmah
++Ͻ
14156 / 8081 / 1513
Регистрация: 27.09.2012
Сообщений: 19,920
Записей в блоге: 3
Завершенные тесты: 1
12.10.2017, 20:29 #6
Цитата Сообщение от Lictor Посмотреть сообщение
Для этого установил полную библиотеку Boost, как написано на этом сайте.
Как правило, эта библиотека уже есть в репозиториях.
Цитата Сообщение от Lictor Посмотреть сообщение
После поиска в интернете я решил, что это ошибка при сборке перед установкой
Компиляция проходит успешно, но линковщик не может найти указанные символы.
Возможно, Вы не подключили библиотеку (не путать с заголовочными файлами).
0
Lictor
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 69
Завершенные тесты: 1
12.10.2017, 20:54  [ТС] #7
Да вроде все подключил:
0
Миниатюры
Ошибка при компиляции Boost  
Croessmah
++Ͻ
14156 / 8081 / 1513
Регистрация: 27.09.2012
Сообщений: 19,920
Записей в блоге: 3
Завершенные тесты: 1
13.10.2017, 04:48 #8
А pthread?
0
Lictor
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 69
Завершенные тесты: 1
13.10.2017, 16:29  [ТС] #9
Цитата Сообщение от Croessmah Посмотреть сообщение
pthread
Цитата Сообщение от Croessmah Посмотреть сообщение
pthread
Так а такой библиотеки не существует (в интернете поискал, boost такую не использует), есть только thread, она подключена.
0
Croessmah
++Ͻ
14156 / 8081 / 1513
Регистрация: 27.09.2012
Сообщений: 19,920
Записей в блоге: 3
Завершенные тесты: 1
13.10.2017, 17:29 #10
Лучший ответ Сообщение было отмечено Lictor как решение

Решение

Цитата Сообщение от Lictor Посмотреть сообщение
Так а такой библиотеки не существует
https://www.gnu.org/software/hurd/libpthread.html
Цитата Сообщение от Lictor Посмотреть сообщение
boost такую не использует
Именно поэтому ошибка undefined reference pthread_*?
Цитата Сообщение от Lictor Посмотреть сообщение
есть только thread, она подключена.
pthread добавьте.
1
AlexVRud
477 / 189 / 72
Регистрация: 04.07.2014
Сообщений: 530
13.10.2017, 17:53 #11
Цитата Сообщение от Croessmah Посмотреть сообщение
pthread добавьте.
как бы он теперь её не попытался скачать, скомпилировать и установить...
1
Croessmah
++Ͻ
14156 / 8081 / 1513
Регистрация: 27.09.2012
Сообщений: 19,920
Записей в блоге: 3
Завершенные тесты: 1
13.10.2017, 18:29 #12
AlexVRud, я тоже об этом подумал,
но, надеюсь, не будет.
0
13.10.2017, 18:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2017, 18:29
Привет! Вот еще темы с решениями:

Ошибка компиляции/линковки.
Компилирую программу отсюда: ... от рута: g++ dae.cpp выдает: что...

Ошибка компиляции нескольких файлов
Добрый день. Изучаю книгу Харви С++ в теме отделение &quot;интерфейса от реализации&quot;...

Ошибка компиляции ассемблерной вставки
Добрый вечер. Захотелось мне сделать ассемблерную вставку в C++ код. Сделал. Но...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru