ubuntu 安装 boost 遇到的坑

2019-12-14 11:41:35 +08:00
 gramyang
手动 wget 下载 boost,解压后编译成功后,用./b2 install --prefix=/usr 进行安装,安装后 ldconfig 更新动态库链接。
到这里都没问题,但是在写了一个测试程序:
#include<iostream>
#include<boost/asio.hpp>

int main(){
boost::shared_ptr<int> myPtr(new int(1));
std::cout<<*myPtr;
return 0;
}

后,g++编译时提示找不到包。。。换了别的程序也是这样。。。。这我就很迷茫了,boost 库文件在 /usr/lib 下面,boost 头文件在 /usr/include/boost 里面都能找得到。。

为什么不用 apt-get ?因为 apt-get 死活找不到 boost 的头文件和库文件。。

求大佬指点!
6897 次点击
所在节点    Linux
14 条回复
northisland
2019-12-14 11:59:38 +08:00
很久没手动安装了,我是 sudo apt install libboost1.58-all-dev
northisland
2019-12-14 12:04:17 +08:00
你用的是智能指针,应该包含<boost/shared_ptr.hpp>

另外今年是 2019 年,你可以用用<memory>里的 std::shared_ptr
FrankHB
2019-12-14 15:00:13 +08:00
g++ 哪有包的概念。强行要包也得 pkg-config 好吧。
这种情况不是先 -v 自己看搜索路径么。
nightwitch
2019-12-14 15:19:06 +08:00
从代码上来看,boost::shared_ptr 需要的头文件你没有包含进去
其次,你如果用 g++编译,至少上个 g++的编译参数上来才能让人帮你诊断问题吧
gramyang
2019-12-14 19:44:49 +08:00
按照楼上大哥的建议:环境 ubuntu18,用 apt install libboost-all-dev 安装了 boost。路径在 /usr/include/boost,里面感觉也不分头文件和库文件,都混在一起。

测试程序:
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

int main()
{
boost::asio::io_service io;

boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();

std::cout << "Hello, world!\n";

return 0;
}

编译命令:g++ t.cpp -lboost_asio -lboost_date_time -o t
结果报错:/usr/bin/ld: cannot find -lboost_asio

求大佬。。。
gramyang
2019-12-14 19:49:49 +08:00
@nightwitch 求大佬帮忙,新的代码在楼中
gramyang
2019-12-14 19:50:16 +08:00
@northisland 按照大佬的建议,重新安装了 boost,但是还是有问题,求帮助!
lcdtyph
2019-12-14 19:58:51 +08:00
asio 需要 -lboost_system ……
lcdtyph
2019-12-14 20:00:03 +08:00
准确得说 asio 本身是 header only 的,但是它引用了 boost::system 的一些东西,而 boost::system 默认不是 header only 的,所以链接的时候需要加上 -lboost_system
gramyang
2019-12-14 20:03:38 +08:00
@lcdtyph 牛批!!!可以了!!
gramyang
2019-12-14 20:12:40 +08:00
@lcdtyph 再请教一下,在 clion 上远程连接 ubuntu,但是运行失败,cmake:
cmake_minimum_required(VERSION 3.1)
project(Ctest)

include_directories(/usr/include/boost)
link_directories(/usr/include/boost)

add_executable(D test/test.cpp)

target_link_libraries(D boost_system boost_date_time)

这个 test.cpp 和上面是一样的代码。。。
lcdtyph
2019-12-14 20:22:36 +08:00
@gramyang
报错呢…
gramyang
2019-12-14 20:27:06 +08:00
@lcdtyph 额,搞定了,把 boost_date_time 换到 boost_system 前面就可以了
nightwitch
2019-12-14 23:18:50 +08:00
include_directories 这种方式已经是 cmake 不推荐使用的方式了
建议学一下怎么用 find_package 模式来链接 boost

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/628978

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX