Понимаешь ЛОРчик есть одни хелловорды и их надо собрать под Ubuntu 32-bit и 64-bit, также под Win32. Вопрос а как в 64-x битной Ubuntu собрать 32-х битное приложение? Под Win32 можно собрать используя i686-w64-mingw32-g++. Т.е. введя i686-w64-mingw32-g++ firts.cpp -o first.exe получу exe-шник. А как получить 32-х битного эльфа на 64-х битной Ubuntu?
И ещё пару вопросов?
1. Чем отличается wineg++ от i686-w64-mingw32-g++?
2. Вообще, с помощью wineg++ можно получить exe-шник?
3. Как вообще собирают Wine и ReactOS.
4. Чем отличается wine1.3-dev http://packages.ubuntu.com/precise/amd64/wine1.3-dev/filelist от mingw-w64-dev http://packages.ubuntu.com/precise/all/mingw-w64-dev/filelist. Почему mingw-w64-dev больше по размеру wine1.3-dev? И почему wine1.3-dev медленно, но верно растёт по объёму? Ведь это же всего лишь h-едеры.
5. Теперь в Debian общий вид gcc компилятора имеет вид: arch-os-gxx. Например, http://packages.debian.org/sid/ia64/g++/filelist есть i64-linux-gnu-g++ т.е. архитектура i64, ос linux-gnu, компилятор g++, или http://packages.debian.org/wheezy/kfreebsd-amd64/gcc/filelist есть файлик x86_64-kfreebsd-gnu-gcc т.е. архитектура x86_64, ос kfreebsd-gnu, компилятор gcc или вот ещё http://packages.debian.org/sid/hurd-i386/gfortran/filelist есть файлик i486-gnu-gfortran т.е. архитектура i486, ос gnu, компилятор gfortran.
Т.е. http://packages.debian.org/sid/amd64/gcc-mingw-w64/filelist есть i686-w64-mingw32-g++. Т.е. архитектура i686, ос w64-mingw32, компилятор g++. i686-w64-mingw32-g++ будет компилировать с C++ даст бинарник оптимизированный под Pentium Pro (i686) и бинарник будет под Windows/Wine/ReactOS. Мои рассуждения верны?
6, В Wine есть 16-ти битной код для запуска Win16 приложений. Чем и как его собирают? Кроме Wine есть ли другие программы под Linux работающие в 16-ти битном режиме, т.е. i286 (защищённый режим работы CPU, с 16-ти разрядными регистрами, сегментной моделью памяти) В Windows есть NTVDM, а в Wine — WINEVDM. В каталоге C:\windows\system32 есть файл winevdm.exe Как собирают winevdm.exe?
Примеры:
# include <iostream>
# include <limits>
int main () {
int last_digit;
int int_number, first_digit, chastnoe, chastnoe2;
int a;
int flag;
int temp_number2, temp_number,temp_number_max_int;
int max_int;
int last_digit_max_int;
max_int = std::numeric_limits<int>::max();
temp_number_max_int = chastnoe2 = max_int;
flag=0;
a=10;
std::cin >> int_number;
if (int_number < 10 ) {std::cout << "Число должно быть больше 10\n"; goto endprg;}
chastnoe=temp_number = int_number;
first_digit = int_number % 10;
while (chastnoe >=10) {
last_digit = chastnoe %10;
temp_number2 = chastnoe %100;
temp_number2 = temp_number2 / 10;
last_digit_max_int = chastnoe2 % 10;
if (temp_number2 == last_digit) flag++;
chastnoe = temp_number / a;
chastnoe2 = temp_number_max_int / a;
if (chastnoe<10) break;
a = a *10;
}
if (flag == 0) std::cout << "No\n"; else std::cout << "Yes\n";
if (first_digit>chastnoe2) std::cout << "Overflow\n"; else {
std::cout << first_digit*a + 10*((int_number % a)/10) +chastnoe << "\n";
}
endprg:return 0;
}
При сборке
alexey@alexey-laptop:~/prg$ i686-w64-mingw32-g++ test.cpp -o test.exe
alexey@alexey-laptop:~/prg$ x86_64-linux-gnu-g++ test.cpp -o test
alexey@alexey-laptop:~/prg$ wineg++ test.cpp -o test1
/usr/bin/ld: Relocatable linking with relocations from format elf32-i386 (test-c0vYza.o) to format elf64-x86-64 (test1.kLZdHP.o) is not supported
winebuild: /usr/bin/ld failed with status 1
winegcc: winebuild failed
alexey@alexey-laptop:~/prg$ file test.exe
test.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit
alexey@alexey-laptop:~/prg$ file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
alexey@alexey-laptop:~$ file test1
test1: ERROR: cannot open `test1' (No such file or directory)
alexey@alexey-laptop:~$
Почему wineg++ ничего не собирает?
Или же:
#include <stdio.h>
#include <windows.h>
int main ()
{
SYSTEMTIME lpSystemTime;
GetSystemTime(&lpSystemTime);
printf("Today is: %d/%d/%d\n", lpSystemTime.wYear,
lpSystemTime.wMonth, lpSystemTime.wDay);
return 0;
}
Собираем:
alexey@alexey-laptop:~/prg$ x86_64-linux-gnu-g++ second.cpp -o second
second.cpp:2:21: фатальная ошибка: windows.h: Нет такого файла или каталога
компиляция прервана.
alexey@alexey-laptop:~/prg$ i686-w64-mingw32-g++ second.cpp -o second.exe
alexey@alexey-laptop:~/prg$ wineg++ second.cpp -o second
И здесь куча ошибок такого плана http://pastebin.com/46fwpmKS
alexey@alexey-laptop:~/prg$ file second.exe
second.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit
alexey@alexey-laptop:~$ file second
second: ERROR: cannot open `second' (No such file or directory)
alexey@alexey-laptop:~/prg$ ./second.exe
Today is: 2011/11/5
alexey@alexey-laptop:~/prg$
Для чего вообще нужен этот wineg++?
man wineg++ даёт: winegcc - Wine C and C++ MinGW Compatible Compiler
Так почему это C++ MinGW Compatible Compiler ничего не собирает?