Как включить сторонние библиотеки в окнах C ++? - PullRequest
1 голос
/ 07 июня 2019

У меня есть библиотека boost в моих папках для скачивания.Когда я пытался включить определенный файл.Это бросать ошибки.Ниже приведен код и шаги, которые я сделал.

\ main.cpp

#include "type_index.hpp"

int main(){
//some code
return 0;
}

Я открыл командную строку и выполнил следующую команду

g++ -IC:\Users\Owner\Downloads\boost_1_70_0\boost -o main main.cpp

В командной строке я получил следующую ошибку

In file included from main.cpp:2:0:
C:\Users\Owner\Downloads\boost_1_70_0\boost/type_index.hpp:17:28: fatal error: boost/config.hpp: No such file or directory
 #include <boost/config.hpp>
                            ^
compilation terminated.

Как запустить вышеуказанный файл?Должен ли я изменить расположение директории буста из папки загрузок в какую-то директорию mingw?

Добавление изображения директории: enter image description here

1 Ответ

2 голосов
/ 07 июня 2019

При условии, что boost правильно настроен и встроен в вашу систему, будет место, где расположен концентратор буста включения root.Пример: если вы загрузили и встроили буст в c:\Stuff\boost_1_70_0, то в этой папке будет хаб набора включенных бустеров, c:\Stuff\boost_1_70_0\boost, и он содержит все заголовки буста.На

на повышение ссылаются путем изменения пути включения для обеспечения доступа к концентратору включения повышения; не для предоставления доступа к самым верхним заголовкам в концентраторе.Как и в openssl, предисловие boost во всех заголовках включает в себя собственные заголовки с boost/.Потребители boost должны сделать то же самое, поэтому путь включения должен включать папку, в которой можно найти концентратор boost/.Он должен не включать сам концентратор boost/ как часть пути.

Пример: Это правильно

g++ -Ic:\Stuff\boost_1_70_0 -o main main.cpp

Это, с другой стороны, неправильно:

g++ -Ic:\Stuff\boost_1_70_0\boost -o main main.cpp

В первом случае, когда код включает в себя:

#include <boost/asio.hpp>

, ищется путь включения и файл найден.Кроме того, в этом заголовке, когда компилятор видит это:

#include <boost/asio/associated_allocator.hpp>

, он все еще может правильно разрешить, потому что удаление этой «вещи» в конце одной из папок в пути включения работает.

Теперь рассмотрим не тот случай.Что произойдет, если вы настроите путь включения, чтобы случайно указать сам корневой концентратор boost/?Что ж, теперь вы можете сделать это:

#include <asio.hpp>

Но как только препроцессор запустит этот заголовок, он увидит:

#include <boost/asio/associated_allocator.hpp>

Гм ..Woops.Препроцессор будет искать это и никогда его не найдет

Сводка

При использовании заголовков boost в вашем источнике, вы всегда обращаетесь к ним с преамбулой boost hub:

#include <boost/headername.hpp>

и всегда включайте папку, в которой находится концентратор boost/, в конфигурацию сборки в качестве исправленного пути включения; не полный путь, включая концентратор boost/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...