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}")
相關文章
- error C4996: 'std::_Uninitialized_copy0':與錯誤 LNK2001 無法解析的外部符號 "private: static class std::allocatorError996Zed符號
- 無法解析外部符號:AdjustTokenPrivileges和GetAstncKetState符號AST
- VS2017無法解析得外部符號符號
- profile對比std::regex與boost::regex的效能
- C++ VS單例模式報 錯誤 LNK2001 無法解析的外部符號 private: static class SingletonPattern錯誤C++單例模式符號
- QT 自定義外掛問題 error: LNK2001: 無法解析的外部符號QTError符號
- boost http響應讀取HTTP
- boost library
- boost and windowsWindows
- 錯誤 1 error LNK2019: 無法解析的外部符號 "public: __thiscall Distance::Distance(int)" (??0Distance@@QAE@H@Z),該符...Error符號
- cmake找不到boost
- Boost UDP Transaction PerformanceUDPORM
- 安裝caffe時候找不到boost怎麼辦?(boost的引用問題make can‘t find Boost‘s include files)
- IDEA出現Cannot resolve symbol “xxx”(無法解析符號)IdeaSymbol符號
- Flutter Boost3.0初探Flutter
- Boost Your Strategy With The Content Marketing Tools
- Signals-The Boost C++ LibrariesC++
- buck電路 & boost電路
- Linux 中boost是什麼?Linux
- Boost 矩形布林運算
- MEV-Boost是什麼?
- 在Qt中使用boost庫QT
- java基本無法-識別符號Java符號
- Boost.Test 斷言的介紹
- rocky9中boost的安裝
- 簡單解析C++基於Boost庫實現命令列C++命令列
- const修飾符的使用(修飾結構體指標,引用外部的const 變數)結構體指標變數
- 最新Turbo Boost Switcher Pro補丁破解版 Turbo Boost Switcher Pro破解安裝教程
- flutter_boost匯入問題Flutter
- Windows下下載編譯boost庫Windows編譯
- Flutter Boost 混合開發框架初探Flutter框架
- cpu溫度監測:Turbo Boost Switcher Pro 啟用版
- boost的安裝、檢視與解除安裝(某動態庫要求的boost版本不適配怎麼辦?)
- 回車符號 ‘ ’ 的實際應用符號
- Ubuntu下安裝C++ boost庫UbuntuC++
- Linux安裝boost、libevent、zlib、OpenSSL庫Linux
- C++使用Boost多執行緒C++執行緒
- 手把手教你實現boost::bind