LINUX.ORG.RU

iostream и windows.h в wine-программе — ошибка компиляции

 , , wineg++,


0

1

Ммм… А что опять с gcc в Wine (точнее wineg++)? Теперь даже элементарная прога не собирается:


#include <iostream>
#include <windows.h>

int main (int argc, char* argv[]) {
    return 0;
}

Ошибка


alexey@alexey-laptop:~/prg$ wineg++ example.cpp -o example.exe
In file included from /usr/include/wine/windows/windows.h:64:0,
                 from example.cpp:2:
/usr/include/wine/windows/winsock.h:443:16: ошибка: повторное определение «struct timeval»
In file included from /usr/include/time.h:41:0,
                 from /usr/include/pthread.h:24,
                 from /usr/include/x86_64-linux-gnu/c++/4.7/./bits/gthr-default.h:41,
                 from /usr/include/x86_64-linux-gnu/c++/4.7/./bits/gthr.h:150,
                 from /usr/include/c++/4.7/ext/atomicity.h:34,
                 from /usr/include/c++/4.7/bits/ios_base.h:41,
                 from /usr/include/c++/4.7/ios:43,
                 from /usr/include/c++/4.7/ostream:40,
                 from /usr/include/c++/4.7/iostream:40,
                 from example.cpp:1:
/usr/include/x86_64-linux-gnu/bits/time.h:30:8: ошибка: предыдущее определение «struct timeval»
In file included from /usr/include/wine/windows/windows.h:64:0,
                 from example.cpp:2:
/usr/include/wine/windows/winsock.h:447:10: ошибка: invalid type in declaration before «,» token
winegcc: g++ failed

ОС: Ubuntu 12.10 64-bit Wine: 1.5.26

★★★★★

Попробуй поменять местами инклуды. ЕМНИП, в версиях MSVC до 2008 была похожая проблема с windows.h и winsock.h

Kosyak ★★★★
()
Ответ на: комментарий от Kosyak

Странно, но заработало…

Попробуй поменять местами инклуды. ЕМНИП, в версиях MSVC до 2008 была похожая проблема с windows.h и winsock.h

Странно, но все работает. Возникает вопрос: WTF?

example.cpp


#include <iostream>
#include <windows.h>



int main (int argc, char* argv[]) {
    return 0;
}

wineg++

alexey@alexey-laptop:~/prg$ wineg++ example.cpp -o example.exe
In file included from /usr/include/wine/windows/windows.h:64:0,
                 from example.cpp:2:
/usr/include/wine/windows/winsock.h:443:16: ошибка: повторное определение «struct timeval»
In file included from /usr/include/time.h:41:0,
                 from /usr/include/pthread.h:24,
                 from /usr/include/x86_64-linux-gnu/c++/4.7/./bits/gthr-default.h:41,
                 from /usr/include/x86_64-linux-gnu/c++/4.7/./bits/gthr.h:150,
                 from /usr/include/c++/4.7/ext/atomicity.h:34,
                 from /usr/include/c++/4.7/bits/ios_base.h:41,
                 from /usr/include/c++/4.7/ios:43,
                 from /usr/include/c++/4.7/ostream:40,
                 from /usr/include/c++/4.7/iostream:40,
                 from example.cpp:1:
/usr/include/x86_64-linux-gnu/bits/time.h:30:8: ошибка: предыдущее определение «struct timeval»
In file included from /usr/include/wine/windows/windows.h:64:0,
                 from example.cpp:2:
/usr/include/wine/windows/winsock.h:447:10: ошибка: invalid type in declaration before «,» token
winegcc: g++ failed

MinGW


alexey@alexey-laptop:~/prg$ x86_64-w64-mingw32-g++ example.cpp -o example.exe
alexey@alexey-laptop:~/prg$ 

example1.cpp


#include <windows.h>
#include <iostream>



int main (int argc, char* argv[]) {
    return 0;
}

wineg++


alexey@alexey-laptop:~/prg$ wineg++ example1.cpp -o example1.exe
alexey@alexey-laptop:~/prg$ 


MinGW

alexey@alexey-laptop:~/prg$ x86_64-w64-mingw32-g++ example1.cpp -o example1.exe
alexey@alexey-laptop:~/prg$ 

Как так? WTF?

Root-msk ★★★★★
() автор топика
Ответ на: Странно, но заработало… от Root-msk

Как так? WTF?

В одном заголовочнике сделали define, ломающий что-то в другом, например. Добропрепроцессор же.

dmfd
()
Ответ на: Странно, но заработало… от Root-msk

Странно, но все работает. Возникает вопрос: WTF?

А теперь представь-что такие 99% исходников под винду-нидайбох поменяешь порядок инклюдов,или порядок определения констант-таки фантастические ошибки полезут,причем может даже собраться-а работать просто в зависимости от погоды на Марсе.

Вспоминаю весь ужас девелоперства под винду и кривой МСВС-хуже сложно чтото придумать.

anonymous
()
Ответ на: комментарий от Kosyak

Вот такие у WinAPI заголовочные файлы.

Так это скорее WineAPI, чем WinAPI.

Так и не могу понять, в чем проблема и почему перестановка инклудов так влият.

Root-msk ★★★★★
() автор топика

вот на такую ошибку я давно-давно напарывался. Судя по тому, что у тебя где-то инклудится winsock.h вместо winsock2.h, произошло нечто подобное.

Kosyak ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.