Неопределенная ссылка на конструктор boost :: random :: random_device и деструктор в MinGW-w64 gcc

Моя ОС — Windows 7 64-bit, и компилятор 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 ().

0

Решение

Я обнаружил, что было неправильно — синтаксис команды 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

Надеюсь, это поможет любому, кто совершит такую ​​глупую ошибку.

1

Другие решения

Других решений пока нет …