Сборка Boost из источников на Linux - PullRequest
0 голосов
/ 06 декабря 2018

Описание:

Я пытаюсь собрать библиотеку Boost (1.68) из исходников Ubuntu 18.04.

https://www.boost.org/doc/libs/1_68_0/more/getting_started/unix-variants.html
https://www.boost.org/users/history/version_1_68_0.html

Вопросы:

1) Для той же версии это эквивалентно sudo apt-get install libboost-all-dev?... который в основном установит все тезисы:

The following NEW packages will be installed:    
  libboost-all-dev libboost-atomic-dev libboost-atomic1.65-dev libboost-atomic1.65.1 libboost-chrono-dev libboost-chrono1.65-dev
  libboost-chrono1.65.1 libboost-container-dev libboost-container1.65-dev libboost-container1.65.1 libboost-context-dev
  libboost-context1.65-dev libboost-context1.65.1 libboost-coroutine-dev libboost-coroutine1.65-dev libboost-coroutine1.65.1
  libboost-date-time-dev libboost-date-time1.65-dev libboost-exception-dev libboost-exception1.65-dev libboost-fiber-dev
  libboost-fiber1.65-dev libboost-fiber1.65.1 libboost-filesystem-dev libboost-filesystem1.65-dev libboost-graph-dev
  libboost-graph-parallel-dev libboost-graph-parallel1.65-dev libboost-graph-parallel1.65.1 libboost-graph1.65-dev
  libboost-graph1.65.1 libboost-iostreams-dev libboost-iostreams1.65-dev libboost-locale-dev libboost-locale1.65-dev
  libboost-log-dev libboost-log1.65-dev libboost-log1.65.1 libboost-math-dev libboost-math1.65-dev libboost-math1.65.1
  libboost-mpi-dev libboost-mpi-python-dev libboost-mpi-python1.65-dev libboost-mpi-python1.65.1 libboost-mpi1.65-dev
  libboost-mpi1.65.1 libboost-numpy-dev libboost-numpy1.65-dev libboost-numpy1.65.1 libboost-program-options-dev
  libboost-program-options1.65-dev libboost-program-options1.65.1 libboost-python-dev libboost-python1.65-dev
  libboost-python1.65.1 libboost-random-dev libboost-random1.65-dev libboost-random1.65.1 libboost-regex-dev
  libboost-regex1.65-dev libboost-regex1.65.1 libboost-serialization-dev libboost-serialization1.65-dev
  libboost-serialization1.65.1 libboost-signals-dev libboost-signals1.65-dev libboost-signals1.65.1 libboost-stacktrace-dev
  libboost-stacktrace1.65-dev libboost-stacktrace1.65.1 libboost-system-dev libboost-system1.65-dev libboost-test-dev
  libboost-test1.65-dev libboost-test1.65.1 libboost-thread-dev libboost-thread1.65-dev libboost-timer-dev libboost-timer1.65-dev
  libboost-timer1.65.1 libboost-tools-dev libboost-type-erasure-dev libboost-type-erasure1.65-dev libboost-type-erasure1.65.1
  libboost-wave-dev libboost-wave1.65-dev libboost-wave1.65.1 libboost1.65-tools-dev

2) Я в основном следовал инструкциям :
работает ./bootstrap.sh откуда яскачал (т.е. в /opt/boost_18_0/bootstrap.sh)
и затем ./b2

в конце процесса b2, он показал:

(...)
...updated 1275 targets...

The Boost C++ Libraries were successfully built!

The following directory should be added to compiler include paths:
    /opt/boost_1_68_0

The following directory should be added to linker library paths:
    /opt/boost_1_68_0/stage/lib

Интересно, почему он не находится в /usr/local где это должно в соответствии с bootstrap.sh настройкой по умолчанию для опции --prefix?

1 Ответ

0 голосов
/ 06 декабря 2018

1) Это эквивалентно sudo apt-get install libboost-all-dev

Нет.sudo apt-get install libboost-all-dev установит любую x.y.z версию буст-библиотек, которую ваш дистрибутив (Debian, Ubuntu ...?) Упаковал как libboost-all-dev в последних обновлениях пакетов, которые вы применили к вашей системе.На моей системе Ubuntu 18.04 это сейчас 1.65.1.Сборка и установка tarball boost_1_68_0.tar.bz2, который вы скачали, конечно, даст вам версию 1.68.0.

Если ваш менеджер пакетов предоставляет libboost-all-dev в версии 1.68.0 (или ту же версию, что и ваша загрузка какsource), а затем сборка и установка из исходного архива tarball предоставит вашим проектам клиентов Boost точно такие же ресурсы Boost с помощью компиляции и компоновки, что и при установке пакета libboost-all-dev.

Но установка этого пакета не создаст егокаталоги и файлы в вашей файловой системе, как сборка и установка исходного архива, если только с ./bootstrap.sh не настроены те же пути установки (--prefix, --includedir, --libdir ...), которые используются при установке пакета apt,Так, например, My apt установка libboost-all-dev устанавливает заголовки повышения в /usr/include/boost и двоичные файлы библиотеки повышения в /usr/lib/x86_64-linux-gnu.Но по умолчанию при установке исходного архива tarball заголовки будут помещены в /usr/local/include/boost, а в двоичные файлы библиотеки - в /usr/local/lib.

. Для данной версии boost единственное другое отличие между apt install libboost-all-dev и исходной сборкой иустановка с префиксом установки по умолчанию (/usr/local) заключается в том, что после сборки и установки исходного кода, если вы хотите связать и запустить свои программы с библиотеками boost shared (не статичными), вам нужно будет запустить$ sudo ldconfig (в любом каталоге), чтобы обновить динамический кеш загрузчика ОС.apt install libboost-all-dev автоматически обновит кэш ldconfig.

Интересно, почему он не находится в / usr / local, где он должен находиться в соответствии с настройками по умолчанию для bootstrap.sh для опции --prefix?

Это потому, чтоВы только что встроили boost, но не установили его.Вы пробежали

./bootstrap.sh

в /opt/boost_1_68_0, и когда он закончил, он сказал вам (среди прочего)

Bootstrapping is done. To build, run:

    ./b2

Итак, как вы говорите, вы пробежали ./b2.То есть для сборки .И когда строительство закончилось, вы увидели результат, который вы опубликовали.Он сообщает вам, что ваша успешная ускоренная сборка теперь может использоваться в клиентских проектах, указав параметр поиска компилятора -I/opt/boost_1_68_0 и параметр поиска компоновщика -L/opt/boost_1_68_0/stage/lib.Вы можете использовать такие библиотеки повышения в директории build /opt/boost_1_68_0, , не устанавливая их .Это было бы то, что вам нужно было бы сделать, если бы у вас не было привилегий root в вашей системе.

Но если вы снова посмотрите на инструкции , на которые вы ссылались, вы найдете:

5.1 Простая сборка и установка

Введите следующие команды в оболочке (не вводите $; это означает приглашение оболочки):

Выберите вашопций конфигурации и снова вызовите ./bootstrap.sh без опции --help.Если у вас нет разрешения на запись в каталог / usr / local / вашей системы, вы, вероятно, захотите по крайней мере использовать

$ ./bootstrap.sh --prefix=path/to/installation/prefix

для установки в другом месте.Кроме того, рассмотрите возможность использования параметров --show-library и --with-library = library-name-list, чтобы ограничить длительное ожидание, которое вы получите, если соберете все.Наконец,

$ ./b2 install

Вы не запустили ./b2 install, и если для указанной вами установки или установки по умолчанию --prefix требуется право root для записи - как в случае с /usr/local по умолчанию -затем вам нужно запустить

$ sudo ./b2 install

После этого вы увидите заголовки и библиотеки повышения в /usr/local/include/boost и /usr/local/lib соответственно, и вам не нужно будет указывать какие-либо явные -I или -L опций для компиляции заголовков повышения или библиотек повышения ссылок, потому что /usr/local/include - это путь поиска по умолчанию для компилятора, а /usr/local/lib - путь поиска по умолчанию для компоновщика.

...