提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、--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
3、执行过程
执行bash build.sh
因为安装时指定了路径./b2 install --prefix=../boost_install/,然后脚本执行拷贝操作,将archive文件拷贝到../lib/linux/路径下
所以编译出的静态库都在../lib/linux/路径中。
三、linux下执行cpp程序
按照教程,编写cpp文件
#include <iostream>
#include <boost/bind.hpp>
#include <string>
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环境
按照这个教程,执行编译程序指令
按照他的教程执行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<name>.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*文件
执行文件./test
成功,到此,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::value, conjunction<Traits...>, Trait>
百度原因为:
Boost 1.73 中的 Boost.Geometry 弃用了对 C++03 的支持,从 Boost 1.75 开始需要C++14。也就是说我下载的1.79版本boost库中几何库需要在c++14上才能调用运行。
VS2010使用boost::geometry库时为什么编译不通过说明_nanke_yh的博客-CSDN博客
CXXFLAGS = -Werror=return-type -std=c++0x -Wl,-z,relro,-z,now,-z,noexecstack -D_FORTIFY_SOURCE=2 -O2 -s -ftrapv -fPIC -fstack-protector-all -w -c -shared -o -D__STDC_LIMIT_MACROS -Dlinux -I./include\
改成
CXXFLAGS = -Werror=return-type -std=c++14 -Wl,-z,relro,-z,now,-z,noexecstack -D_FORTIFY_SOURCE=2 -O2 -s -ftrapv -fPIC -fstack-protector-all -w -c -shared -o -D__STDC_LIMIT_MACROS -Dlinux -I./include\
可以解决。【还是要认真看报错日志啊】
总结
boost库安装成功并正确编译程序