Моя ОС — 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 ().
Я обнаружил, что было неправильно — синтаксис команды 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
Надеюсь, это поможет любому, кто совершит такую глупую ошибку.
Других решений пока нет …