BOOST應用 無法解析的外部符號 "void __cdecl boost::throw_exception(class std::exception const &)"
簡介
在Windows系統上,使用boost時發現未定義的外部符號的連結問題:
thread_test_01.cpp.obj : error LNK2019: 無法解析的外部符號 "void __cdecl boost::
throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXAEBVe
xception@std@@@Z),該符號在函式 "public: __cdecl boost::gregorian::date::date(cl
ass boost::gregorian::greg_year,class boost::gregorian::greg_month,class boost::
gregorian::greg_day)" (??0date@gregorian@boost@@QEAA@Vgreg_year@12@Vgreg_month@1
2@Vgreg_day@12@@Z) 中被引用
thread_test_01.exe : fatal error LNK1120: 1 個無法解析的外部命令
本文總結了該問題的解決思路。問題分析
搜尋程式碼,發現boost/throw_exception.hpp檔案中定義瞭如下相關的程式碼:
#ifdef BOOST_NO_EXCEPTIONS
void throw_exception( std::exception const & e ); // user defined
#else
inline void throw_exception_assert_compatibility( std::exception const & ) { }
template<class E> BOOST_NORETURN inline void throw_exception( E const & e )
{
//All boost exceptions are required to derive from std::exception,
//to ensure compatibility with BOOST_NO_EXCEPTIONS.
throw_exception_assert_compatibility(e);
#ifndef BOOST_EXCEPTION_DISABLE
throw enable_current_exception(enable_error_info(e));
#else
throw e;
#endif
}
#endif
由於定義了BOOST_NO_EXCEPTIONS巨集,使用者需要自己實現throw_exception函式。進一步搜尋BOOST_NO_EXCEPTIONS巨集,發現程式碼中相關定義如下:
#if !defined(_CPPUNWIND) && !defined(__EXCEPTIONS)
# define BOOST_NO_EXCEPTIONS
#endif
而巨集_CPPUNWIND用於標識編譯器是否開啟異常處理。而這裡需要開啟異常處理的功能,在Visual studios中,需要在編譯選項中使用/GX或者/EHsc,告訴編譯器使能異常處理的功能。如果使用cmake,可以使用下面的設定來進行配置:
set(CMAKE_CXX_FLAGS "/EHsc ${CMAKE_CXX_FLAGS}")
相關文章
- 無法解析的外部符號符號
- 無法解析外部符號:AdjustTokenPrivileges和GetAstncKetState符號AST
- error C4996: 'std::_Uninitialized_copy0':與錯誤 LNK2001 無法解析的外部符號 "private: static class std::allocatorError996Zed符號
- 關於VS報無法解析外部符號的錯誤符號
- VS2017無法解析得外部符號符號
- boost原始碼剖析----boost::any原始碼
- error LNK2019: 無法解析的外部符號 __imp___CrtDbgReportWError符號
- boost學習之Boost.Lambda
- boost http響應讀取HTTP
- boost and windowsWindows
- C++ VS單例模式報 錯誤 LNK2001 無法解析的外部符號 private: static class SingletonPattern錯誤C++單例模式符號
- QT 自定義外掛問題 error: LNK2001: 無法解析的外部符號QTError符號
- 錯誤 1 error LNK2019: 無法解析的外部符號 _WinMain@16,該符號在函式 ___tmainCRTStartup 中被引用Error符號AI函式
- boost library
- boost庫的介紹
- Boost UDP Transaction PerformanceUDPORM
- boost之ThreadPoolthread
- 小試 boost spirit
- Boost原始碼剖析--原始碼
- 安裝caffe時候找不到boost怎麼辦?(boost的引用問題make can‘t find Boost‘s include files)
- Tracking Boost Regulator TYPICAL 5V REGULATION WITH BOOST CONVERTER AND LDO
- Boost中的單利模式模式
- 實戰準標準庫Boost —— (2)測試Boost配置的Hello World程式
- 編譯 boost 庫(win7+boost1.60+vs2008)編譯Win7
- [Boost]一種簡單的批分字串的辦法 (轉)字串
- Flutter Boost3.0初探Flutter
- Boost常用庫案列
- java基本無法-識別符號Java符號
- 棧的應用---平衡符號符號
- 不應該出現的 ora 12514:無法解析指定的連線識別符號符號
- boost 正規表示式解析配置檔案或命令列命令列
- boost------asio庫的使用1(Boost程式庫完全開發指南)讀書筆記筆記
- 無符號數相減得到的是無符號還是有符號?符號
- 在Qt中使用boost庫QT
- Boost timer實現
- boost庫學習筆記筆記
- Boost原始碼剖析開篇原始碼
- boost::any原始碼分析 (轉)原始碼