c++ - 如何在 boost::asio 中使用预编译头文件

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

我有一个项目,其中包含一些 main.cpp 和以下预编译 header :

 <!-- 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) unresolved external symbol "private: static class boost::asio::detail::tss_ptr::context> boost::asio::detail::call_stack::top_" (?top_@?$call_stack@Vstrand_impl@strand_service@detail@asio@boost@@E@detail@asio@boost@@0V?$tss_ptr@Vcontext@?$call_stack@Vstrand_impl@strand_service@detail@asio@boost@@E@detail@asio@boost@@@234@A)

2) unresolved external symbol "public: static class boost::asio::detail::service_id boost::asio::detail::service_base::id" (?id@?$service_base@Vselect_reactor@detail@asio@boost@@@detail@asio@boost@@2V?$service_id@Vselect_reactor@detail@asio@boost@@@234@A)

3) unresolved external symbol "public: static class boost::asio::detail::service_id boost::asio::detail::service_base::id" (?id@?$service_base@Vstrand_service@detail@asio@boost@@@detail@asio@boost@@2V?$service_id@Vstrand_service@detail@asio@boost@@@234@A)

4) unresolved external symbol "public: static class boost::asio::detail::service_id > > boost::asio::detail::service_base > >::id" (?id@?$service_base@V?$deadline_timer_service@Vptime@posix_time@boost@@U?$time_traits@Vptime@posix_time@boost@@@asio@3@@asio@boost@@@detail@asio@boost@@2V?$service_id@V?$deadline_timer_service@Vptime@posix_time@boost@@U?$time_traits@Vptime@posix_time@boost@@@asio@3@@asio@boost@@@234@A)

提升:v1_49 静态/MTd

最佳答案

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

对于其他可行的情况,这可能是因为 Boost header 中的任何 static 都不必从预编译 header 对象文件中导出。

关于c++ - 如何在 boost::asio 中使用预编译头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10685416/

相关文章:

c++ - Pthread队列系统

c++ - 如何使用 std::vector<bool> 进行文件 I/O?

visual-studio - 为什么 Visual C++ 中的用户类型不突出显示?

c++ - 链接 lib 时未解析的外部符号,编译器将字母 'A' 添加到函数名称

macos - 将 OpenCV(带 Cuda)与实现 CUDA 函数的 C++ 代码链接起来会返回链接错误

c - 链接内核 - 输入文件的 i386 架构与 i386 不兼容 :x86_64 output

c++ - 使用多态创建 'array of types'

c++ - 在插入之前使用 lower_bound 搜索 map 的好处。等同于 ptr_map?

c++ - VC++ : KB971090 and selecting Visual C Runtime DLL dependencies

c++ - 如何指定库路径的偏好?