Неопределенная ссылка на InterlockedCompareExchange с boost.thread на mingw64 (но не на mingw32)

Я на компьютере с Fedora 19 x86_64, на котором установлен mingw64 и все соответствующие пакеты. Я работал над личным проектом на c ++ и решил сделать его поточно-ориентированным, поэтому решил попробовать синхронизировать объекты Boost.thread. Как только я это сделал, я начал получать ошибки компоновщика, связанные с InterlockedCompareExchange. Следующая тестовая программа иллюстрирует мою точку зрения:

#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>

int main()
{
boost::shared_mutex mtx;
boost::unique_lock<decltype(mtx)> lck{mtx};
}

Вот командная строка (я поставил -lboost_thread-mt, потому что нет не многопоточной версии, что имеет смысл):

$ x86_64-w64-mingw32-g ++ -std = c ++ 11 test.cpp -o test
-I / usr / x86_64-w64-mingw32 / sys-root / mingw / include -L / usr / x86_64-w64-mingw32 / sys-root / mingw / lib -lboost_thread-mt -lboost_system

/tmp/cc4Wh6PO.o:test.cpp:(.text$_ZN5boost12shared_mutex28interlocked_compare_exchangeINS0_10state_dataEEET_PS3_S3_S3_[_ZN5boost12shared_mutex28interlocked_compare_exchangeINS0_10state_dataEEET_PS3_S3_S3_]+0x2f):
неопределенная ссылка на InterlockedCompareExchange collect2: error:
ld вернул 1 статус выхода

Но с mingw32 он компилируется как шарм:

$ i686-w64-mingw32-g ++ -std = c ++ 11 test.cpp -o test
-I / usr / i686-w64-mingw32 / sys-root / mingw / include -L / usr / i686-w64-mingw32 / sys-root / mingw / lib -lboost_thread-mt -lboost_system

У меня вопрос: я делаю что-то не так или это ошибка в mingw64? Это компилируется с версией Windows MINGW?

Изменить: на самом деле это так, поэтому это должно быть ошибка в пакете fedora mingw64

2

Решение

На основании этой страницы http://sourceforge.net/apps/trac/mingw-w64/wiki/Building%20Boost, Вы можете добавить define = BOOST_USE_WINDOWS_H, чтобы избежать этой ошибки компоновки. Меня устраивает.

3

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

На самом деле я продолжаю получать те же результаты, поэтому обязательно сообщу об этом. Спасибо

1

Я столкнулся с подобной проблемой неопределенной ссылки на функции Interlocked *.
Насколько я знаю, mingw64 rev2 из проекта MinGWBuilds (на sf) работает, а rev3 не работает. Поэтому я верю, что в MinGW64 что-то изменилось.

0
По вопросам рекламы [email protected]