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

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

本文关键字:random 析构函数 构造函数 gcc MinGW-w64 上的 boost device      更新时间:2023-10-16

我的操作系统是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:UsersDanielAppDataLocalTempcc5DfdjZ.o:main.cpp:(.text+0x15):
undefined reference to `boost::random::random_device::random_device()'
C:UsersDanielAppDataLocalTempcc5DfdjZ.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

而正确的是 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

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