在MinGW-w64 gcc上对boost :: random :: random_device构造函数和析构函数的未定义引用

时间:2016-04-22 23:15:53

标签: c++ windows boost g++ boost-random

我的操作系统是Windows 7 64位,我正在使用的C ++编译器是:

g++ (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 5.3.0

我使用:

安装了Boost版本1.60
bootstrap.bat mingw
b2 install target=gcc

然后我使用Boost.Random tutorial中的示例测试它是否正常工作。

前两个一切都很好,但第三个给出了关于boost :: random :: random_device的链接器错误。我将代码最小化为只有这个:

// Compiled with:
// g++ -IC:/Boost/include/boost-1_60
// -LC:/Boost/lib -lboost_random-mgw53-mt-1_60
// main.cpp

#include "boost/random/random_device.hpp"

int main() {
    boost::random::random_device rng;
}

我收到以下错误:

C:\Users\Daniel\AppData\Local\Temp\cc5DfdjZ.o:main.cpp:(.text+0x15):
undefined reference to `boost::random::random_device::random_device()'
C:\Users\Daniel\AppData\Local\Temp\cc5DfdjZ.o:main.cpp:(.text+0x20):
undefined reference to `boost::random::random_device::~random_device()'
collect2.exe: error: ld returned 1 exit status

在这里,在SO上,我发现有类似问题的人将-lboost_system添加到了标志中,但对我来说它没有帮助。

有没有人有任何想法,为什么它不起作用?我检查过,我的Boost文件夹中有random_device.hpp标头,其中包含random_device()和~random_device()的声明。

1 个答案:

答案 0 :(得分:1)

我发现了什么错 - g ++命令语法,我想用它来编译和链接我的代码。

正如我在问题中所写,我这样做:

g++ -IC:/Boost/include/boost-1_60 -LC:/Boost/lib -lboost_random-mgw53-mt-1_60 main.cpp

虽然正确的是main.cpp(或任何其他源代码文件,我们希望包含在编译过程中)之前 -L和-l标志。 例如:

g++ -IC:/Boost/include/boost-1_60 main.cpp -LC:/Boost/lib -lboost_random-mgw53-mt-1_60

甚至

g++ main.cpp -IC:/Boost/include/boost-1_60 -LC:/Boost/lib -lboost_random-mgw53-mt-1_60

希望它能帮助任何人,他们也会犯这样愚蠢的错误。