【问题标题】:Undefined reference to boost::random::random_device constructor and destructor on MinGW-w64 gccMinGW-w64 gcc 上对 boost::random::random_device 构造函数和析构函数的未定义引用
【发布时间】:2016-04-22 23:15:53
【问题描述】:

我的操作系统是 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() 的声明。

【问题讨论】:

  • 离题:如果 std::random_device 在您的 mingw 版本中智能工作,您可以为此放弃 boost。
  • @ user4581301 不,std::random_device 在我的 mingw 版本中没有实现非确定性。

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


【解决方案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

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

【讨论】:

  • 对我来说,在 Linux 上,它与 -lboost_random 一起工作,这很容易忘记
  • @Doot 是的,Linux 稍微简化了一点,但是顺序(这是错误的实际原因)仍然很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 2016-09-26
  • 2017-02-02
  • 1970-01-01
相关资源
最近更新 更多