0

尝试将我的项目与 MSVC 10.0 上的 boost.log 静态链接时出现以下(以及更多)错误:

 1>libboost_log-vc100-mt-gd-1_53.lib(attribute_name.obj) : error
 LNK2001: unresolved external symbol "**__declspec(dllimport)** public:
 __thiscall std::_Container_base::~_Container_base(void)" (__imp_??1_Container_base@std@@QAE@XZ)
 1>libboost_log-vc100-mt-gd-1_53.lib(text_file_backend.obj) : error
 LNK2001: unresolved external symbol "**__declspec(dllimport)** public:
 __thiscall std::_Container_base::~_Container_base(void)" (__imp_??1_Container_base@std@@QAE@XZ)

请注意,该项目链接到 boost 系统、文件系统和线程库。

1>      Searching ../lib/\libboost_system-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_date_time-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_regex-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_thread-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_chrono-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_log-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_filesystem-vc100-mt-gd-1_53.lib:

我的项目没有定义BOOST_ALL_DYN_LINKorBOOST_LOG_DYN_LINK宏,所以我没想到会看到__declspec签名,我认为这是最终的问题。我是否缺少正确静态链接该库所需的内容?

更新

我删除了项目中的预编译头文件并执行了“清理”,一切都很好。预编译的头文件是否有可能以某种方式导致项目静态链接到 CRT?

4

1 回答 1

0

您可能需要log_setup先链接然后再log之​​前filesystem等等,这是我的提升链接代码CMakeLists.txt

set(USED_BOOST_LIBS ${Boost_LOG_SETUP_LIBRARY} ${Boost_LOG_LIBRARY} 
  ${Boost_FILESYSTEM_LIBRARY} 
  ${Boost_SYSTEM_LIBRARY} ${Boost_DATE_TIME_LIBRARY} 
  ${Boost_THREAD_LIBRARY} ${Boost_REGEX_LIBRARY} 
  )

...
target_link_libraries(myexe ${USED_BOOST_LIBS})

它适用于我在 MSVC 14.0 和 gcc 4.8 上。你可以试试。

于 2016-12-21T06:45:34.737 回答