C++ 如何将预编译头与boost::asio一起使用

C++ 如何将预编译头与boost::asio一起使用,c++,visual-c++,linker,boost-asio,compilation-time,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>

我有一个项目,它有一些
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 

#ifndef预编译
#定义预编译
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#恩迪夫
如果项目是
*.lib
,则它总是正常生成

如果项目是
*.exe

使用
Create(/Yc)
生成时,一切正常。
当设置
使用(/Yu)
时,我得到链接器错误
LNK2001

1) 未解析的外部符号“private:static class boost::asio::detail::tss_ptr::context>boost::asio::detail::call_stack::top_u”(?top_@?$call)_stack@Vstrand_impl@股线_service@detail@asio@boost@@E@detail@asio@boost@@0V?$tss_ptr@Vcontext@?$call_stack@Vstrand_impl@股线_service@detail@asio@boost@@E@detail@asio@boost@@@234@A)

2) 未解析的外部符号“public:static class boost::asio::detail::service\u id boost::asio::detail::service\u base::id”(?id@?$service_base@Vselect_reactor@detail@asio@促进@@@detail@asio@boost@@2V?$服务_id@Vselect_reactor@detail@asio@促进@@@234@A)

3) 未解析的外部符号“public:static class boost::asio::detail::service\u id boost::asio::detail::service\u base::id”(?id@?$service_base@Vstrand_service@detail@asio@促进@@@detail@asio@boost@@2V?$服务_id@Vstrand_service@detail@asio@促进@@@234@A)

4) 未解析的外部符号“public:static class boost::asio::detail::service\u id>>boost::asio::detail::service\u base>>::id”(?id@?$service)_base@V?截止日期计时器_service@Vptime@posix_time@boost@@美元时间_traits@Vptime@posix_time@boost@@@asio@3@@asio@boost@@@detail@asio@boost@@2V?$服务_id@V?截止日期计时器_service@Vptime@posix_time@boost@@美元时间_traits@Vptime@posix_time@boost@@@asio@3@@asio@boost@@@234@A)


Boost:v1_49 static/MTd

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


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

您在这里如何使用PCH?您需要链接预编译头构建输出的
/Yc
对象文件,以及其余的对象文件(使用
/Yu
构建的对象)。类似问题请参见此处:我不明白哪个对象必须链接到其他对象。如需澄清:当删除使用
asio
库的所有位置时(从源代码和预编译头),并在预编译头中添加来自boost的其他内容(例如:
boost::bind
)所有都可以正常工作。如果您查看错误-我们只有asio错误,其他包括visual studio查看的文件也可以正常工作。如果您的预编译头名为
PCH.H
,您还应该有一个
PCH.CPP
文件,该文件使用
/Yc
编译并链接(如
PCH.OBJ
)感谢所有你用
/Yu
编译的人。非常感谢Steve Townsend,它是有效的。你打开了我的眼睛,救了我的命。现在我不明白为什么它在其他情况下有效。好的,我添加了这个作为将来参考的答案。很高兴听到它现在被整理出来了。