【发布时间】:2012-09-13 19:36:28
【问题描述】:
所以我在无法链接任何运行时库或使用异常的环境中工作。但是,我们想利用 BOOST 或 STL。最初我们尝试在 boost::container::string/vector/map/... 中进行链接,但无法解决链接器错误。
所以目前我正在尝试链接 STL 的标头,为此我定义了以下预处理器指令:
#define _HAS_ITERATOR_DEBUGGING 0
#define _HAS_EXCEPTIONS 0
我能够成功地与#include 链接,并且我能够实例化一个std::vector,但是当我调用push_back(32); 时在向量上,我收到以下链接器错误:
error LNK2001: unresolved external symbol "void (__cdecl* std::_Raise_handler)(class stdext::exception const &)" (?_Raise_handler@std@@3P6AXAEBVexception@stdext@@@ZEA)
error LNK2001: unresolved external symbol _invoke_watson
error LNK2001: unresolved external symbol "void __cdecl std::_Xlength_error(char const *)" (?_Xlength_error@std@@YAXPEBD@Z)
我们使用的是 Visual Studio 2010(它是默认编译器)。我们希望在不久的将来迁移到 vs2012,如果它有助于解决这些错误,则可以加快迁移速度。
有没有办法在这些限制下链接 boost 或 STL(没有例外,没有运行时库)?
谢谢!我们真的不想因为我们的环境限制而错过 STL/boost 的好处
【问题讨论】:
-
你到底在什么环境下!@?!?!??@!
-
当你说运行时库是指动态/共享库还是标准库?
-
C++ 没有例外? 为什么?因为你喜欢一直检查错误代码的更慢和更大的代码?还是因为您想要更快、更小代码而忽略错误代码?没有例外也会使大多数 C++ 库对您毫无用处。 (虽然EASTL 是为无例外而设计的)
-
可能会有所帮助:stackoverflow.com/questions/553103/…。而这个:playtechs.blogspot.com/2007/07/… 只需搜索“c++ stl without exceptions”“std::_Raise_handler”
-
@Wug 和 Mooing Duck:一种可能性是嵌入式系统。想象一下,如果一架在 30,000 英尺高空飞行的客机的飞行控制系统抛出异常会发生什么。他们是不允许的。
malloc也不是。
标签: c++ exception stl runtime libraries