使用提升::文件系统的分段错误
Segmentation fault with boost::filesystem
我刚刚在Mac上安装了boost。(已安装的MacPorts,sudo端口安装提升)在XCode中,我添加了标题搜索路径(/opt/local/include)和库搜索路径(/opt/local/lib),并将库添加到构建阶段 - 链接二进制与库(libboost_filesystem-mt.a,libboost_filesystem-mt.dylib,libboost_system-mt.a,libboost_system-mt.dylib)。现在我尝试构建并运行此代码
#include <iostream>
#include <string>
#include <boost/filesystem.hpp>
int main() {
std::string filename;
std::cin >> filename;
std::cout << boost::filesystem::exists(filename);
return 0;
}
对于键入的任何路径,我都得到了分段错误:11 当调用 exists() 时。
我做错了什么?安装助推器时有什么错误吗?
我过去遇到过类似的问题,当 boost 不是用与您的程序相同的CXXFLAGS
构建时。这是一组伪完整的引导指令。
# Configure, build, and install boost
./bootstrap.sh
--prefix=${PWD}/.local
--with-libraries=...,filesystem,...
./b2
-q
-d2
-j4
--debug-configuration
--disable-filesystem2
--layout=tagged
--build-dir=${PWD}/obj
cxxflags="-v -std=c++11 -stdlib=libc++"
linkflags="-stdlib=libc++"
link=shared
threading=multi
install
那里重要的部分是cxxflags
和linkflags
。根据我的经验,最常见的原因是macports在不使用-stdlib=libc++
的情况下进行编译,但是在使用-std=c++11
编译C++11
代码时,这是必需的。常见症状包括 gdb 中的随机回溯,这些回溯表明隐藏在提升库/模板深处的特定结构内的指针存在问题。
从上面可以看出,我在每个项目的目录中构建了一个 boost 的本地副本(例如 ${PWD}/.local
),然后在开发过程中链接到本地版本,直到需要打包(此时我静态链接或执行其他操作)。
# In a GNUmakefile
LOCAL_DIR=${PWD}/.local
INC_DIR=${LOCAL_DIR}/include
LIB_DIR=${LOCAL_DIR}/lib
CPPFLAGS=-I"${INC_DIR}"
CXXFLAGS=-std=c++11 -stdlib=libc++
LDFLAGS=-stdlib=libc++ -L"${LIB_DIR}"
MYPROG_SRCS=myprog.cpp
MYPROG_OBJS=$(MYPROG_SRCS:.cpp=.o)
%.o : %.cpp %.hpp
${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<
myprog: ${MYPROG_OBJS}
${CXX} ${LDFLAGS} -o $@ $^ ${LIBS}
底线:您的CPPFLAGS
和LDFLAGS
需要在 boost 和您的计划之间匹配。
我刚刚尝试过,它似乎工作正常 - 我按如下方式构建了您的代码:
$ g++ -Wall -lboost_system-mt -lboost_filesystem-mt boost_filesystem.cpp
这是使用 Xcode 5,以及直接从 http://boost.org 下载并安装在 /usr/local
中的 boost 1.51.0。
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?