【发布时间】:2012-05-27 23:07:09
【问题描述】:
我有一个项目有一些 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) 未解析的外部符号“私有:静态类 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) 未解析的外部符号 "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) 未解析的外部符号 "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) 未解析的外部符号 "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?$最后期限_timer_service@Vptime@posix_time@boost@@U?$time_traits@Vptime@posix_time@boost@@@asio@3@@asio@boost@@@234@A)
提升:v1_49 静态/MTd
【问题讨论】:
-
您在这里使用 PCH 的具体情况如何?您需要将预编译头文件构建输出的
/Yc目标文件与其余目标文件(使用/Yu构建的目标文件)链接。请参阅此处了解类似问题:stackoverflow.com/questions/998881/… -
我不明白哪个对象必须链接到其他对象。澄清一下:当删除所有使用
asio库的地方(从源代码和预编译头文件)并在预编译头文件中添加来自 boost 的其他内容(例如:boost::bind)时,一切正常。如果您查看错误 - 我们只有 asio 错误,其他包含文件 Visual Studio 可以看到并且工作正常。 -
如果您的预编译头文件名为
PCH.H,您还应该有一个PCH.CPP文件,该文件使用/Yc编译并链接(如PCH.OBJ)到您使用@ 编译的所有其他文件987654337@. -
非常感谢 Steve Townsend,它是有效的。你打开我的眼睛,救了我的命。现在我不明白为什么它在其他情况下也有效。
-
好的,我已将其添加为将来参考的答案。很高兴听到它现在已经解决了。
标签: c++ visual-c++ linker boost-asio compilation-time