尝试将项目静态链接到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_LINK
或BOOST_LOG_DYN_LINK
宏,所以我没想到会看到__declspec
签名,我认为这是最终的问题。我是否遗漏了静态正确链接此库所需的内容?
更新
我在项目中删除了预编译的标题并执行了“干净”,所有内容都很好。是否有可能预编译头文件以某种方式导致项目静态链接到CRT?
答案 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上都可以正常使用。你可以尝试一下。