2013-04-23 89 views
0

尝试我的项目静态地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)" ([email protected]@@[email protected]) 
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)" ([email protected]@@[email protected]) 

注意,该项目还可以链接到增强系统,文件系统和线程库。

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?

+0

'BOOST_ALL_DYN_LINK'强制* Boost *库动态链接,而您看到的'__declspec'签名与标准C++库有关,该库是动态链接的。 PCH不能改变CRT连接,它只是MT/MD编译器选项,但IDE中通常存在一些故障,所以清理和重建总是很好的。 – 2013-04-23 12:11:32

+0

@IgorR。总是要学习。感谢您的帮助,随时重新发布答案。 – jwalk 2013-04-23 12:27:48

+0

我认为它不能回答你的问题,因为我不知道你的项目设置有什么问题。 – 2013-04-23 16:10:09

回答

0

您可能需要链接log_setup先,然后filesystem之前log等等,这是提升链接代码在我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.You能尝试一下。