anonymous@RULINUX.NET~# Last login: 2024-12-22 22:35:45
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Как кросскомпилировать программы С++?

Eсть одни хелловорды и их надо собрать под 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:windowssystem32 есть файл winevdm.exe Как собирают winevdm.exe?

Примеры:

cpp
# 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 << "Число должно быть больше 10n"; 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 << "Non"; else std::cout << "Yesn";
  if (first_digit>chastnoe2) std::cout << "Overflown"; 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++ ничего не собирает?

Или же:

cpp

#include <stdio.h>
#include <windows.h>
 
int main ()
{
        SYSTEMTIME lpSystemTime;
 
        GetSystemTime(&lpSystemTime);
        printf("Today is: %d/%d/%dn", 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 ничего не собирает?

Root-msk(*) (2011-11-06 11:50:30)

Yggdrasil (YggdrasilOS Based on Linux kernel-3.0; ru; rv:1.0) Belldandy and Co GoddessBrowser/1.0

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: Как кросскомпилировать программы С++? от Root-msk 2011-11-06 11:50:30
avatar
Скрыть

Re:Как кросскомпилировать программы С++?

Если ты собираешь через wine, то получаешь программу Windows в виде бинарника под 32-битный Linux со статично залинкованной wine.

Если ты собираешь mingw, то получаешь что надо. Но библиотеки тоже надо компилить под mingw.

Oreolek(*)(2011-11-06 12:21:10)

[#] [Добавить метку] [Редактировать] Ответ на: Как кросскомпилировать программы С++? от Root-msk 2011-11-06 11:50:30
avatar
Скрыть

Re:Как кросскомпилировать программы С++?

>как в 64-x битной Ubuntu собрать 32-х битное приложение
g++ -m32 ...

anonymous(*)(2011-11-06 21:32:05)

Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!