boost.log错误链接静态

时间:2013-04-23 10:25:19

标签: boost boost-log

尝试将项目静态链接到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_LINKBOOST_LOG_DYN_LINK宏,所以我没想到会看到__declspec签名,我认为这是最终的问题。我是否遗漏了静态正确链接此库所需的内容?

更新

我在项目中删除了预编译的标题并执行了“干净”,所有内容都很好。是否有可能预编译头文件以某种方式导致项目静态链接到CRT?

1 个答案:

答案 0 :(得分: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上都可以正常使用。你可以尝试一下。