linux编译boost库并执行程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言

    一、--prefix命令

    二、安装过程

    1、shell脚本:

    2、gcc编译环境 

    执行过程

    三、linux下执行cpp程序

    总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、--prefix命令

--prefix命令是什么意思

如果指定 --prefix

比如: --prefix=/usr/local/keepalived ,则此软件的所有文件都到 /usr/local/keepalived 目录下,很整齐。

二、安装过程

在linux上安装boost库

1、shell脚本:
#!/bin/bash
PREFIX_INC_PATH=$(cd "$(dirname "$0")";pwd)
tar xzvf boost-1.79.0.tar.gz
#git git地址
mv boost-1.79.0 boost
chmod -R 777 boost
cd boost
./bootstrap.sh --with-libraries=all --with-toolset=gcc
./b2  cxxflags=-fPIC cflags=-fPIC toolset=gcc link=static
./b2 install --prefix=../boost_install/
cd ..
rm -rf ${PREFIX_INC_PATH}/../include ${PREFIX_INC_PATH}/../lib
mkdir -p ${PREFIX_INC_PATH}/../lib/linux
cp -rf boost_install/include ../
cp -f boost_install/lib/libboost_date_time.a ../lib/linux/
cp -f boost_install/lib/libboost_filesystem.a ../lib/linux/
cp -f boost_install/lib/libboost_log.a ../lib/linux/
cp -f boost_install/lib/libboost_regex.a ../lib/linux/
cp -f boost_install/lib/libboost_serialization.a ../lib/linux/
cp -f boost_install/lib/libboost_system.a ../lib/linux/
cp -f boost_install/lib/libboost_thread.a ../lib/linux/
cp -f boost_install/lib/libboost_iostreams.a ../lib/linux/
rm -rf boost_install
rm -rf boost
2、gcc编译环境 

gcc 8.2.0

执行过程

执行bash build.sh

因为安装时指定了路径./b2 install --prefix=../boost_install/

所以编译出的静态库都在../lib/linux/路径中。

三、linux下执行cpp程序

按照教程,编写cpp文件

#include 
#include 
#include 
using namespace std;
 
class Hello
{
public:
	void say(string name) 
	{ cout << name << " say: hello world!" << endl; }
};
 
int main()
{
	Hello h;
	auto func = boost::bind(&Hello::say, &h, "zhang san");
	func();
	return 0;
}

Linux编译安装boost库_linux编译boost-CSDN博客

按照上述教程,写好cpp程序,将test-boost.cpp文件导入linux环境

按照这个教程,执行编译程序指令

Linux下编译使用boost库 - 代码先锋网

按照他的教程执行g++ test-boost.cpp -o test -I /home/johnchen/boost_1_56_0/include -L /home/johnchen/boost_1_56_0/lib -l:libboost_system.a -l:libboost_filesystem.a指令,但是报错

/usr/local/bin/ld: cannot find -l:libboost_system.a
/usr/local/bin/ld: cannot find -l:libboost_filesystem.a
collect2: error: ld returned 1 exit status

百度这个报错,理解为执行器还是从/usr/local/bin/ld路径下寻找静态库了,

理解为没有正确链接景泰路,但是我的静态库文件在../lib/linux路径下,所以需要正确指定静态库路径,于是现在的问题就是怎么正确链接静态库,于是但是百度静态链接,百度关键词【linux gcc 链接静态库的几种方式】,找到这个教程,linux gcc 链接静态库的几种方式_yygr的博客-CSDN博客

文中说到

注意上面的说明中红框标注的内容,如果-l:filename格式指定一个文件名,连接程序直接去找这个文件名了,不会再像使用-lname时将name扩展成lib.a格式的文件名.
所以使用 -l:libpng.a这样的形式来指定连接库,就指定了静态连接png库。
当然如果库的位置不在gcc默认搜索路径中,要用-L参数另外指定搜索库的路径,否则连接程序不知道该从哪里找到filename

-L/your/library/path -l:libmylib.a

将编译指令更改为

g++ test-boost.cpp -o test -L /root/data/lib/linux -l:libboost_system.a -l:libboost_filesystem.a

执行成功,路径下增加test*文件

linux编译boost库并执行程序_第1张图片

执行文件./test

linux编译boost库并执行程序_第2张图片

成功,到此,boost库安装成功并正确编译程序。OK!

四、linux/windows环境编译boost库

Boost库编译指南_boost 编译_Jelin大魔王的博客-CSDN博客

五、报错处理

安装boost库的时候报错

../../../3rd/boost/include/boost/geometry/geometry.hpp:27:1: note: in expansion of macro ‘BOOST_PRAGMA_MESSAGE’
[2023/11/04 10:14:59.423 GMT+08:00]    27 | BOOST_PRAGMA_MESSAGE("CAUTION: Boost.Geometry in Boost 1.73 deprecates support for C++03 and will require C++14 from Boost 1.75 onwards.")

../../../3rd/boost/include/boost/geometry/util/type_traits_std.hpp:54:25: error: expected template-name before ‘<’ token
[2023/11/04 10:14:59.424 GMT+08:00]    54 |     : std::conditional_t, Trait>

百度原因为:

Boost 1.73 中的 Boost.Geometry 弃用了对 C++03 的支持,从 Boost 1.75 开始需要C++14。也就是说我下载的1.79版本boost库中几何库需要在c++14上才能调用运行。

VS2010使用boost::geometry库时为什么编译不通过说明_nanke_yh的博客-CSDN博客

可以解决。【还是要认真看报错日志啊】


总结

boost库安装成功并正确编译程序

你可能感兴趣的:(linux,linux)