Boost::FileSystem链接问题

4
我按照这里的指示在Windows 7 (64位)上下载和构建了boost库(version 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。我没有明确告诉它需要那个文件,所以不知道它是如何发现的?无论如何,我将链接器指向了正确的目录,然后出现了上述错误。

有人知道如何解决这个问题吗?谢谢。

编辑:我正在使用 VS2010 工具链通过 eclipse CDT 来构建系统。完整的编译命令为

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>

你能展示一个最小化的例子代码,以重现你遇到的错误吗? - CharlesB
你的项目目标系统是什么?你使用相同位数构建了 Boost 吗:Win32 为 32 位,x64 为 64 位? - Alex F
1
至于你的附加问题,boost会自动添加一个pragma语句告诉链接器它需要所述的.lib文件。 - CharlesB
2
关于“它是如何找到这个”的部分:Boost头文件包括对Windows平台上的自动链接支持。确切的库名称是从各种预处理器定义中组装而成,然后在#pragma comment(lib, ...)指令中使用。 - TeaWolf
我使用了“简化的源代码构建”,即链接中详细介绍的boostrap; .\b2命令。很可能这个命令编译了错误的版本。抱歉,我应该说明一下,我使用的是VS2010,并已将详细信息添加到问题中。 - Dan
显示剩余2条评论
2个回答

2

使用b2命令行选项重新构建Boost库,其中address-model=64。这将构建64位库。


0

如果你正在使用Linux系统,并且偶然发现这篇文章寻找解决方法,那么解决方法是(至少在Ubuntu 12.10上)安装boost文件系统的开发包:

sudo apt-get install libboost-filesystem-dev

这将安装正确的库以进行链接,一切都会正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接