【发布时间】:2011-08-29 12:10:48
【问题描述】:
我按照instructions here 在 Windows 7(64 位)上下载并构建了 boost 库(版本 1.47.0)。
现在,当我想使用 Boost::Filesystem 库时,我可以毫无问题地包含头文件并编译我的代码文件。问题出现在链接。我收到以下错误;
main.obj : error LNK2019: unresolved external symbol "class boost::filesystem3::file_status __cdecl boost::filesystem3::detail::status(class boost::filesystem3::path const &,class boost::system::error_code *)" (?status@detail@filesystem3@boost@@YA?AVfile_status@23@AEBVpath@23@PEAVerror_code@system@3@@Z) referenced in function "bool __cdecl boost::filesystem3::exists(class boost::filesystem3::path const &)" (?exists@filesystem3@boost@@YA_NAEBVpath@12@@Z)
main.obj : error LNK2019: unresolved external symbol "private: static class std::codecvt<wchar_t,char,int> const * & __cdecl boost::filesystem3::path::wchar_t_codecvt_facet(void)" (?wchar_t_codecvt_facet@path@filesystem3@boost@@CAAEAPEBV?$codecvt@_WDH@std@@XZ) referenced in function "public: static class std::codecvt<wchar_t,char,int> const & __cdecl boost::filesystem3::path::codecvt(void)" (?codecvt@path@filesystem3@boost@@SAAEBV?$codecvt@_WDH@std@@XZ)
(除其他外)
值得注意的是,当我第一次尝试构建项目时,它说找不到 .lib 文件 libboost_filesystem-vc100-mt-1_47.lib。我没有明确告诉它它需要那个文件,所以不确定它是如何计算出来的?无论哪种方式,我将链接器指向正确的目录,然后它给出了上述错误。
有人知道如何解决这个问题吗?谢谢。
编辑:我正在通过eclipse CDT使用VS2010工具链来构建系统。完整的编译命令是
cl /c /EHs /MD /Zi /I"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include" /I"C:\boost_1_47_0" /nologo <SOURCE_FILE>
和链接器命令
link /debug /nologo /libpath:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64 /libpath:C:\boost_1_47_0\stage\lib /libpath:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64 /OUT:<EXE_NAME> <OBJECT_FILES>
【问题讨论】:
-
您能否展示一个重现您遇到的错误的最小示例的代码?
-
你的项目目标系统是什么?您是否使用相同的位数构建了 Boost:Win32 为 32 位,x64 为 64 位?
-
至于你的小问题,boost 会自动添加一个
pragma语句来告诉链接器它需要所说的.lib -
关于“它是如何计算出来的”部分:Boost 头文件包括对 Windows 平台上的自动链接的支持。确切的库名称由各种预处理器定义组合而成,然后在
#pragma comment( lib, ... )指令中使用。 -
我使用了“从源代码简化构建”,即链接中详述的
boostrap; .\b2命令。这很可能编译了错误的版本。对不起应该说,使用VS2010,已经在Q中添加了细节。