我正在尝试从Ubuntu 18.04上的源代码构建Boost库(1.68)。
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)
我基本上遵循instructions:
从我下载的位置(即在./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
中?
答案 0 :(得分:2)
1)它等同于sudo apt-get install libboost-all-dev
不。 sudo apt-get install libboost-all-dev
将安装任何内容
您发行版的x.y.z
版Boost库(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
(或与您下载的版本相同的版本),然后构建并
从源代码tarball安装将为您的boost客户项目提供
通过编译和链接与安装完全相同的增强资源
libboost-all-dev
包。
但是安装该软件包不会
在文件系统中创建与构建和安装相同的目录和文件
源压缩包,除非使用./bootstrap.sh
配置相同的安装路径
--prefix
软件包安装所使用的{--includedir
,--libdir
,apt
...)。
因此,例如我的apt
安装libboost-all-dev
安装了增强功能
/usr/include/boost
下的标头和下的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
(在任何目录中)以更新OS加载程序的动态链接缓存。
apt install libboost-all-dev
将自动更新ldconfig
缓存。
我想知道为什么根据--prefix选项的bootstrap.sh默认设置,它为什么不在/ usr / local中?
那是因为您刚刚构建了 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
。您可以像这样使用boost库,
从构建目录 /opt/boost_1_68_0
中,不安装它们。这就是你必须要做的
如果您在系统上没有root特权,该怎么办。
但是,如果您再次查看the instructions 链接到后,您会发现:
5.1易于构建和安装
在shell中发出以下命令(不要键入$;代表shell的提示符):
选择配置选项,然后不带--help选项再次调用./bootstrap.sh。除非您在系统的/ usr / local /目录中具有写权限,否则您可能至少要使用
$ ./bootstrap.sh --prefix=path/to/installation/prefix
安装在其他地方。另外,考虑使用--show-libraries和--with-libraries = library-name-list选项来限制构建所有内容时的漫长等待。最后,
$ ./b2 install
您尚未运行./b2 install
,并且已指定安装还是默认安装
--prefix
需要root权限才能写-默认/usr/local
就是这种情况-那么您需要运行
$ sudo ./b2 install
此后,您将在/usr/local/include/boost
下看到boost标题和库
和/usr/local/lib
,并且您无需指定任何明确的-I
或-L
选项来编译增强标题或链接增强库,因为/usr/local/include
是编译器的默认搜索路径,而/usr/local/lib
是该编译器的默认搜索路径。
链接器。