如何使用boost :: asio预编译头

时间:2012-05-21 12:37:51

标签: c++ visual-c++ linker boost-asio compilation-time

我有一个项目有一些main.cpp和以下预编译标题:

 <!-- language: lang-cpp -->
 #ifndef PRECOMPILE_H
 #define PRECOMPILE_H
 #include <iostream>
 #include <string>
 #include <vector>
 #include <boost\asio.hpp>
 #include <boost\bind.hpp>
 #include <boost\asio\ssl.hpp>
 #include <boost\locale.hpp>
 #include <boost\algorithm\string.hpp>
 #endif 

如果项目为*.lib,则它始终正常构建。

如果项目为*.exe
使用Create (/Yc)构建时,一切正常。
设置Use (/Yu) 时出现链接器错误 LNK2001

  

1)未解析的外部符号&#34; private:static class boost :: asio :: detail :: tss_ptr :: context&gt;提高:: ASIO ::详细:: CALL_STACK ::顶部_&#34; (?顶_ @?$ @ CALL_STACK @ Vstrand_impl @ strand_service详细@ ASIO @升压@@ Einstein @ Home详细@ ASIO @升压@@ 0V?$ @ tss_ptr @ Vcontext?$ @ CALL_STACK @ Vstrand_impl @ strand_service详细@ ASIO @升压@@ è@细节@ ASIO @升压@@@ 234 @ A)

     

2)未解析的外部符号&#34; public:static class boost :: asio :: detail :: service_id boost :: asio :: detail :: service_base :: id&#34; (?编号@?$ service_base @ Vselect_reactor @细节@ ASIO @升压@@@细节@ ASIO @ @@升压2V?$ @的service_id @ Vselect_reactor详细@ ASIO @升压@@@ 234 @ A)

     

3)未解析的外部符号&#34; public:static class boost :: asio :: detail :: service_id boost :: asio :: detail :: service_base :: id&#34; (?编号@?$ service_base @ Vstrand_service @细节@ ASIO @升压@@@细节@ ASIO @ @@升压2V?$ @的service_id @ Vstrand_service详细@ ASIO @升压@@@ 234 @ A)

     

4)未解析的外部符号&#34; public:static class boost :: asio :: detail :: service_id&gt; &GT; boost :: asio :: detail :: service_base&gt; &GT; :: ID&#34; (?ID @?$ @ service_base V'$ @ deadline_timer_service @ Vptime @了posix_time提升@@ U&$ @ time_traits @ Vptime @了posix_time提高@@@ ASIO @ 3 @@ ASIO @提升@@@细节@ ASIO @提振@ @ 2V?$ @的service_id V'$ deadline_timer_service @ Vptime @了posix_time @ @@升压U&$ time_traits @ Vptime @了posix_time @升压@@@ ASIO @ @@ 3 ASIO @升压@@@ 234 @ A)

提升:v1_49 static / MTd

1 个答案:

答案 0 :(得分:3)

如果您的预编译标头名为PCH.H,那么您还应该拥有一个PCH.CPP文件,该文件将使用/Yc进行编译并链接(作为PCH.OBJ)给您所有其他人用/Yu编译。

对于其他有效的情况,也许这是因为Boost标头中的任何static都不必从预编译的头文件对象文件中导出。