来自boost库的binary_oarchive抛出了意外的std :: bad_cast

时间:2013-07-24 14:50:18

标签: c++ boost

#include <fstream>
#include <boost/archive/binary_oarchive.hpp>

int main()
{
std::ofstream file("data.dat", std::ios_base::binary);
boost::archive::binary_oarchive oar(file);
return 0;
}

我使用以下Makefile编译了上面的代码。

CC = g++

CFLAGS = -pedantic -std=c++11 -I/usr/local/Cellar/boost/1.54.0/include

LDFLAGS = -L/usr/local/Cellar/boost/1.54.0/lib -lboost_iostreams-mt -lboost_serialization-mt

all: test

test: test.o
    $(CC) $(CFLAGS) test.o $(LDFLAGS) -o test

%.o: %.cpp
$(CC) $(CFLAGS) -c $< -o $@

clean:
rm -f *.o

当我运行程序时,它会抛出std::bad_cast的实例。问题在于boost::archive::binary_oarchive oar(file);的召唤。我认为,file在某种程度上与binary_oarchive不兼容。我正在使用Mac OS X 10.6的系统,并在几个小时前使用自制程序来安装boost。此示例代码摘自Emile Cormier的答案:

Reading and writing C++ vector to a file

在那里,我找到了将矢量数据写入文件的解决方案。

编辑:有人知道,为什么这个程序会抛出'std :: bad_cast'?是否可能,此代码在其他计算机上运行,​​问题与我的系统有关?

解决方案: 要弄清楚,如果我的问题与一些奇怪的配置错误有关,我在另一台计算机上设置Linux Mint并尝试编译并在那里运行上面的代码。令人惊讶的是,它没有抛出“std :: bad_cast”。然后我用自制程序卸载了boost,并尝试使用boost-Website和我首选的编译器gcc-4.9上的指令编译库。在那之后,我的代码编译并运行良好。 我认为问题是,我使用的boost库是用另一个编译器转换编译的,而不是我在我自己的代码上使用的。

0 个答案:

没有答案