繁体   English   中英

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

[英]Undefined reference to boost::random::random_device constructor and destructor on MinGW-w64 gcc

我的操作系统是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 教程中的示例测试了它是否正常工作。

对于前两个,一切都很好,但是第三个给了关于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()。

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

正如我在问题中写道的那样,我这样做是:

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

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

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

希望它能对任何也会犯这种愚蠢错误的人有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM