我最近将我的提升库升级到 1.63 版本。但是一个函数,boost:filesystem:exist现在不起作用。在使用 boost 库 1.54 之前,代码还可以。相反,现在进入分段错误。:
#include <boost/filesystem.hpp>
namespace fs=boost::filesystem;
using namespace std;
int main()
{
fs::path selfpath=fs::system_complete("Testa2.cpp");
cout<<selfpath<<endl;
if(fs::exists(selfpath.c_str()))
cout<<"Never here"<<endl;
它编译为:
g++ -std=c++11 Testa5.cpp -lboost_filesystem -lboost_system
但存在分段错误。
怎么可能? 我该如何解决它?
(我在 Ubuntu 上( (我从这里安装了提升: http://www.linuxfromscratch.org/blfs/view/cvs/general/boost.html(
您安装了不是为您正在使用的 (Ubuntu( 发行版构建的二进制文件。
首选使用特定于发行版的包或从源代码编译,使用与编译程序时相同的编译器版本和标志。
其他任何事情都会遇到 ABI 问题,即未定义的行为
所以,在 Ubuntu 上,通常会安装像 boost 这样的
sudo apt-get install libboost-all-dev
确保你链接到正确的 boost 版本,正如 Umbert 在上一个答案的评论中提到的那样。
例如:
我的链接器正在目录:/usr/lib/x86_64-linux-gnu/
中查找libboost_filesystem.so
(版本 1.58(。
虽然对我来说正确的路径应该是:/usr/local/lib/
libboost_filesystem.so
(版本 1.67(所在的位置。