基于Ubuntu及py3的CTP接口编译——Boost编译

1、boost下载并解压:

.tar.bz2格式在UNIX/Linux平台下越来越普及,并且其还被整合到一些tar工具中。这个格式使用了被认为比.tar.gz更好的不同的压缩方法,因而压缩成的文件更小。

解压tar.gz文件用tar -zxvf ×××.tar.gz,解压tar.bz2文件用tar -jxvf ×××.tar.bz2:

2、配置GCC:

GCC(The GNU Compiler Collection)可以实现C语言、C++语言等由源码向二进制编译的过程,是工具集,含gcc、g++等。

如果你需要gcc/g++来编译,就需要用到build-essential。当然你也可以分别单独安装gcc/g++,用build-essential 只不过方便管理罢了!

网上说Ubuntu是自带GCC的,但小编检查后发现并木有呀,就自行配置了。

3、编译并安装boost:

Boost库的编译安装还有一些依赖库,需要先安装,否则也许会出现不能完全编译安装的情况,如果要全量安装 boost,需要先安装第三方依赖,编译器和构建工具(如 cmake):

先更新下apt-get先:

安装boost第三方依赖:

安装构建工具cmake,编译器以上已配置:

小编首次编译安装时,对依赖认识浅,从以下可见是未能全量编译boost的:

执行bootstrap.sh以生成编译构建工具bjam及b2,其中bjam是老版本,b2是bjam的升级版本,本质是一样的。

编译安装boost.python需要python支持,考虑未来python多版本问题,小编采用anaconda下的虚拟环境py36,这里没有用最新的Python3.7,原因不赘述了。有关bootstrap.sh的配置命令,可见如下:

第一次想用g++来编译boost C++ library,但发现并不支持,转为gcc后就OK了,刚开始小编对--with-toolset理解错了,认为填g++编译器以编译cpp,但其实这里应该填gcc即The GNU Compiler Collection,为编译器工具集,在调用GCC编译代码时,会根据后缀来调用具体编译器,由于历史原因,此处的gcc有二重义,刚开始是C编译器,后来随着历史的发展指代为GNU的编译器工具集。

改为gcc后执行bootstrap.sh就成功生成bjam及b2了,这里小编未自定义将来boost库的安装路径,官方默认路径是 /usr/local/include 和 /usr/local/lib,分别存放头文件和各种库,usr/local主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。

命令执行完之后不要马上编译,我们需要修改project-config.jam这个文件,我们打开这个文件,找到python.configured部分,默认只有版本号和安装根目录,没有头文件和库路径所以编译的时候会报找不到头文件的错误,最后编译完之后boost里面也找不到boost.python的库,这里添加配置如下:

官方其实建议小编在/home/quantpengpeng/boost_1_69_0/tools/build/example中的user-config.jam中具体指定python版本等信息,但小编不太喜欢这种方式,就选在project-config.jam中进行指定,很明显,若小编没有在user-cnofig.jam中指定,则编译时会去project-config.jam中查询是否有指定,当然,两者的指定书写方式是一模一样的。

接下来开始编译,考虑方便,就全部编译了,所需时长在半个钟左右吧:

编译成功后进行安装:

安装完后检查 /usr/local/include下是否存在boost, 以及/usr/local/lib下是否存在libboost_python36.so,检查后发现是存在的那就成功了。

其实boost_1_69_0里boost文件夹存储hpp,而libs存储的是cpp库源码,在我们编译后会生成stage/lib,里面放着链接库文件。

好奇的小编仔细比较过,boost_1_69_0/boost其实就对应着默认头文件安装路径/usr/local/include/boost,boost_1_69_0/stage/lib就对应着默认库文件安装路径usr/local/lib,里面的内容是一模一样的。

可想而知,如果仅仅是想编译,而不想将hpp与so副本化安装到其它地方,直接编译就好了,感觉其实也没必要安装。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181219G11EA400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券