c – 如何将提升链接到我的程序?

我下载了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]

解决方法:

回答

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(与“仅标题”的第一段中相同的链接).

上一篇:c – 检查整数常量在编译时具有不同的值


下一篇:c – .o / .a / .so文件究竟是什么?