在 MinGW-w64 gcc 上未定义对 boost::random::random_device 构造函数和析构函数的引用
Undefined reference to boost::random::random_device constructor and destructor on MinGW-w64 gcc
我的 OS 是 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到flags,但对我来说没有帮助。
有谁知道为什么它不起作用?我检查了一下,我的 Boost 文件夹中有 random_device.hpp header,其中包含 random_device() 和 ~random_device() 的声明。
我发现了错误 - 我想用来编译的 g++ 命令语法和 link 我的代码。
正如我在问题中所写,我是这样做的:
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
希望对也会犯这种愚蠢错误的人有所帮助。
我的 OS 是 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到flags,但对我来说没有帮助。
有谁知道为什么它不起作用?我检查了一下,我的 Boost 文件夹中有 random_device.hpp header,其中包含 random_device() 和 ~random_device() 的声明。
我发现了错误 - 我想用来编译的 g++ 命令语法和 link 我的代码。
正如我在问题中所写,我是这样做的:
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
希望对也会犯这种愚蠢错误的人有所帮助。