Я хотел запустить программу на C ++, которую я разработал для Windows 7 и скомпилировал с Visual Studio 2013, на Ubuntu 14.04, используя Wine 1.6.
Как и ожидалось, я получал много ошибок, поэтому я попробовал что-то простое:
#include <iostream>
int main() {
std::cout << "Hello main\n";
}
Я связался со статической версией библиотеки времени выполнения C ++ (Runtime Library
установить в /MT
) так что мне не нужно никаких DLL. И это работало просто отлично.
Но затем я добавил несколько очень простых потоков:
#include <iostream>
#include <thread>
void call_from_thread() {
std::cout << "Hi from thread\n";
}
int main() {
std::thread t(call_from_thread);
t.join();
return 0;
}
Это скомпилировано и нормально работает на моей машине с Windows (конечно), но запуск его на Ubuntu через Wine вызвал у меня некоторые ужасные ошибки:
Нажатие «Показать детали» ничего не показывает и выходит из Wine, но нажатие «Закрыть» приводит к появлению дополнительных выходных данных:
Я попробовал еще раз, на этот раз изменив ссылку на общую версию C ++ Runtime Library (Runtime Library
установить в /MD
), затем схватил msvcr120.dll
а также msvcp120.dll
от моего C:/Windows/SysWOW64
каталог на машине Windows для использования вином. Но я получил почти те же сообщения об ошибках.
Поиск через Google предполагает эта многопоточность поддерживается Wine, поэтому я понятия не имею, почему моя программа не работает.
Обновление до последней версии Wine (на данный момент 1.7.33) и использование чистого wineprefix сделали пример работы с потоками просто отлично работающим. Я должен был ожидать этого, так как Wine 1.6 был выпущен в июле 2013 года.