如何将boost链接到我的程序?

时间:2014-07-17 20:35:42

标签: c++ boost compilation linker

我下载了Boost 1.54并运行了bootstrap.bat mingw。然后我试着运行下面的程序。我收到你在下面看到的错误。我已经尝试将我的boost文件夹复制到mingw include文件夹中,我尝试将我的文件链接到boost/stage/lib文件夹,但我没有成功。我看到很多类似于这个问题的问题,但没有一个解释如何将boost文件夹链接到文件。

我是否必须将boost文件夹复制到其他目录?我是否必须更改路径变量?如何将boost库链接到我的代码?

代码

#include <boost/filesystem.hpp>   
#include <iostream>              

using namespace std; 
using namespace boost::filesystem;

int main()
{
    boost::filesystem::directory_iterator iterator(string("."));
    for(; iterator != boost::filesystem::directory_iterator(); ++iterator)
    {
        cout << (iterator->path().filename()) << endl;
    }

    boost::filesystem::path full_path( boost::filesystem::current_path() );
    std::cout << "Current path is : " << full_path << std::endl;
   return 0;

}

错误

C:\Users\212340~1\AppData\Local\Temp\ccZA7umT.o:playground.cc:(.text+0xa4): undefined reference to `boost::filesystem::path::filename() const'
C:\Users\212340~1\AppData\Local\Temp\ccZA7umT.o:playground.cc:(.text+0x244): undefined reference to `boost::system::generic_category()'
C:\Users\212340~1\AppData\Local\Temp\ccZA7umT.o:playground.cc:(.text+0x24e): undefined reference to `boost::system::generic_category()'
C:\Users\212340~1\AppData\Local\Temp\ccZA7umT.o:playground.cc:(.text+0x258): undefined reference to `boost::system::system_category()'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\212340~1\AppData\Local\Temp\ccZA7umT.o: bad reloc address 0x1b in section `.text$_ZNK5boost6system10error_code7messageEv[__ZNK5boost6system10error_code7messageEv]'
collect2.exe: error: ld returned 1 exit status
[Finished in 21.0s with exit code 1]

1 个答案:

答案 0 :(得分:6)

答案

必须明确链接

boost::system。与boost的许多其他部分相比,boost系统不是header-only。因此,您必须确保在编译时链接它。您有两种链接选项。

参考: http://www.boost.org/doc/libs/1_47_0/more/getting_started/unix-variants.html#link-your-program-to-a-boost-library

选项1

使用-lboost_system(或/ boost _# ## #/ stage / lib /目录中的等效文件)。当然,除非boost系统驻留在标准查找目录中,否则还必须使用-L/file/path/to/libraries设置库路径。

实施例

g++ playground.cc -o playground -L~/boost/stage/lib/ -libboost_filesystem-mgw48-mt-1_54.a

选项2

在代码末尾包含库的完整文件路径。

实施例

从命令行运行此命令。三引号"""仅对包含空格的路径是必需的。

g++ playground.cc -o playground """C:\My Programs\boost_1_54_0\stage\lib\libboost_filesystem-mgw48-mt-1_54.a""" """C:\My Programs\boost_1_54_0\stage\lib\libboost_system-mgw48-mt-1_54.a"""

注意:有关不是标题的文件列表,请参阅http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html#header-only-libraries(与“仅标题”的第一段相同的链接)。