<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_6_thread_35131"  />
<title>rulinux.net - Форум - Development - Как кросскомпилировать программы С++? </title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Development - Как кросскомпилировать программы С++? </title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Re:Как кросскомпилировать программы С++? </title>
<link>https://rulinux.net/message.php?newsid=35131&amp;page=1#113337</link>
<guid>https://rulinux.net/message.php?newsid=35131&amp;page=1#113337</guid>
<pubDate>Sun, 06 Nov 2011 17:32:05 +0400</pubDate>
<description><![CDATA[<p><i>>как в 64-x битной Ubuntu собрать 32-х битное приложение</i><br> g++ -m32 ...</p>]]></description>
</item>
<item>
<title>Re:Как кросскомпилировать программы С++? </title>
<link>https://rulinux.net/message.php?newsid=35131&amp;page=1#113230</link>
<guid>https://rulinux.net/message.php?newsid=35131&amp;page=1#113230</guid>
<pubDate>Sun, 06 Nov 2011 08:21:10 +0400</pubDate>
<description><![CDATA[<p>Если ты собираешь через wine, то получаешь программу Windows в виде бинарника под 32-битный Linux со статично залинкованной wine.<br><br>Если ты собираешь mingw, то получаешь что надо. Но библиотеки тоже надо компилить под mingw.</p>]]></description>
</item>
<item>
<title>Как кросскомпилировать программы С++? </title>
<link>https://rulinux.net/message.php?newsid=35131&amp;page=1#113226</link>
<guid>https://rulinux.net/message.php?newsid=35131&amp;page=1#113226</guid>
<pubDate>Sun, 06 Nov 2011 07:50:30 +0400</pubDate>
<description><![CDATA[<p>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?<br><br>И ещё пару вопросов?<br><br>1. Чем отличается wineg++ от i686-w64-mingw32-g++?<br><br>2. Вообще, с помощью wineg++ можно получить exe-шник?<br><br>3. Как вообще собирают Wine и ReactOS.<br><br>4. Чем отличается wine1.3-dev <a href="http://packages.ubuntu.com/precise/amd64/wine1.3-dev/filelist">http://packages.ubuntu.com/precise/amd64/wine1.3-dev/filelist</a> от mingw-w64-dev <a href="http://packages.ubuntu.com/precise/all/mingw-w64-dev/filelist">http://packages.ubuntu.com/precise/all/mingw-w64-dev/filelist</a>. Почему mingw-w64-dev больше по размеру wine1.3-dev? И почему wine1.3-dev медленно, но верно растёт по объёму? Ведь это же всего лишь h-едеры.<br><br>5. Теперь в Debian общий вид gcc компилятора имеет вид: arch-os-gxx. Например, <a href="http://packages.debian.org/sid/ia64/g++/filelist">http://packages.debian.org/sid/ia64/g++/filelist</a> есть i64-linux-gnu-g++ т.е. архитектура i64, ос linux-gnu, компилятор g++, или <a href="http://packages.debian.org/wheezy/kfreebsd-amd64/gcc/filelist">http://packages.debian.org/wheezy/kfreebsd-amd64/gcc/filelist</a> есть файлик x86_64-kfreebsd-gnu-gcc т.е. архитектура x86_64, ос kfreebsd-gnu, компилятор gcc или вот ещё <a href="http://packages.debian.org/sid/hurd-i386/gfortran/filelist">http://packages.debian.org/sid/hurd-i386/gfortran/filelist</a> есть файлик i486-gnu-gfortran т.е. архитектура i486, ос gnu, компилятор gfortran. Т.е. <a href="http://packages.debian.org/sid/amd64/gcc-mingw-w64/filelist">http://packages.debian.org/sid/amd64/gcc-mingw-w64/filelist</a> есть i686-w64-mingw32-g++. Т.е. архитектура i686, ос w64-mingw32, компилятор g++. i686-w64-mingw32-g++ будет компилировать с C++ даст бинарник оптимизированный под Pentium Pro (i686) и бинарник будет под Windows/Wine/ReactOS. Мои рассуждения верны?<br><br>6, В Wine есть 16-ти битной код для запуска Win16 приложений. Чем и как его собирают? Кроме Wine есть ли другие программы под Linux работающие в 16-ти битном режиме, т.е. i286 (защищённый режим работы CPU, с 16-ти разрядными регистрами, сегментной моделью памяти) В Windows есть NTVDM, а в Wine -- WINEVDM. В каталоге C:windowssystem32 есть файл winevdm.exe Как собирают winevdm.exe?<br><br>Примеры:<br><br><fieldset><legend>cpp</legend><code><br />
<span style="color: #339900;"># include &lt;iostream&gt;</span><br />
<span style="color: #339900;"># include &lt;limits&gt;</span><br />
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">int</span> last_digit<span style="color: #008080;">;</span> <br />
&nbsp; <span style="color: #0000ff;">int</span> int_number, first_digit, chastnoe, chastnoe2<span style="color: #008080;">;</span> &nbsp; &nbsp; <br />
&nbsp; <span style="color: #0000ff;">int</span> a<span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">int</span> flag<span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">int</span> temp_number2, temp_number,temp_number_max_int<span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">int</span> max_int<span style="color: #008080;">;</span> <br />
&nbsp; <span style="color: #0000ff;">int</span> last_digit_max_int<span style="color: #008080;">;</span><br />
&nbsp; max_int <span style="color: #000080;">=</span> std<span style="color: #008080;">::</span><span style="color: #007788;">numeric_limits</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">max</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; temp_number_max_int <span style="color: #000080;">=</span> chastnoe2 <span style="color: #000080;">=</span> max_int<span style="color: #008080;">;</span><br />
&nbsp; flag<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; a<span style="color: #000080;">=</span><span style="color: #0000dd;">10</span><span style="color: #008080;">;</span><br />
&nbsp; std<span style="color: #008080;">::</span><span style="color: #0000dd;">cin</span> <span style="color: #000080;">&gt;&gt;</span> int_number<span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>int_number <span style="color: #000080;">&lt;</span> 10 <span style="color: #008000;">&#41;</span> &nbsp;<span style="color: #008000;">&#123;</span>std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Число должно быть больше 10<span style="color: #000099; font-weight: bold;">n</span>&quot;</span><span style="color: #008080;">;</span> <span style="color: #0000ff;">goto</span> endprg<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><br />
&nbsp; chastnoe<span style="color: #000080;">=</span>temp_number <span style="color: #000080;">=</span> int_number<span style="color: #008080;">;</span><br />
&nbsp; first_digit <span style="color: #000080;">=</span> int_number <span style="color: #000040;">%</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>chastnoe <span style="color: #000080;">&gt;=</span>10<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; last_digit <span style="color: #000080;">=</span> chastnoe <span style="color: #000040;">%</span><span style="color:#800080;">10</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; temp_number2 <span style="color: #000080;">=</span> chastnoe <span style="color: #000040;">%</span><span style="color:#800080;">100</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; temp_number2 <span style="color: #000080;">=</span> temp_number2 <span style="color: #000040;">/</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; last_digit_max_int <span style="color: #000080;">=</span> chastnoe2 <span style="color: #000040;">%</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span> <br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>temp_number2 <span style="color: #000080;">==</span> last_digit<span style="color: #008000;">&#41;</span> flag<span style="color: #000040;">++</span><span style="color: #008080;">;</span> &nbsp;<br />
&nbsp; &nbsp; chastnoe <span style="color: #000080;">=</span> temp_number <span style="color: #000040;">/</span> a<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; chastnoe2 <span style="color: #000080;">=</span> temp_number_max_int <span style="color: #000040;">/</span> a<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>chastnoe<span style="color: #000080;">&lt;</span>10<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; a <span style="color: #000080;">=</span> a <span style="color: #000040;">*</span><span style="color: #0000dd;">10</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>flag <span style="color: #000080;">==</span> 0<span style="color: #008000;">&#41;</span> std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;No<span style="color: #000099; font-weight: bold;">n</span>&quot;</span><span style="color: #008080;">;</span> <span style="color: #0000ff;">else</span> std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Yes<span style="color: #000099; font-weight: bold;">n</span>&quot;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>first_digit<span style="color: #000080;">&gt;</span>chastnoe2<span style="color: #008000;">&#41;</span> std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Overflow<span style="color: #000099; font-weight: bold;">n</span>&quot;</span><span style="color: #008080;">;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> first_digit<span style="color: #000040;">*</span>a <span style="color: #000040;">+</span> <span style="color: #0000dd;">10</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>int_number <span style="color: #000040;">%</span> a<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span>chastnoe <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">n</span>&quot;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; endprg<span style="color: #008080;">:</span><span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
&nbsp;</code></fieldset><br><br>При сборке<br><br><br />alexey@alexey-laptop:~/prg$ i686-w64-mingw32-g++ test.cpp -o test.exe <br />alexey@alexey-laptop:~/prg$ x86_64-linux-gnu-g++ test.cpp -o test <br />alexey@alexey-laptop:~/prg$ wineg++ test.cpp -o test1 /usr/bin/ld: <br />Relocatable linking with relocations from format elf32-i386 (test-c0vYza.o) to format elf64-x86-64 (test1.kLZdHP.o) is not supported <br />winebuild: /usr/bin/ld failed with status 1 <br />winegcc: winebuild failed<br><br>alexey@alexey-laptop:~/prg$ file test.exe <br />test.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit <br />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 <br />alexey@alexey-laptop:~$ file test1 <br />test1: ERROR: cannot open `test1' (No such file or directory) <br />alexey@alexey-laptop:~$<br><br>Почему wineg++ ничего не собирает?<br><br>Или же:<br><br><fieldset><legend>cpp</legend><code><br />
<br />
<span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339900;">#include &lt;windows.h&gt;</span><br />
&nbsp;<br />
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; SYSTEMTIME lpSystemTime<span style="color: #008080;">;</span><br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GetSystemTime<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>lpSystemTime<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Today is: %d/%d/%d<span style="color: #000099; font-weight: bold;">n</span>&quot;</span>, lpSystemTime.<span style="color: #007788;">wYear</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lpSystemTime.<span style="color: #007788;">wMonth</span>, lpSystemTime.<span style="color: #007788;">wDay</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
&nbsp;</code></fieldset><br><br>Собираем: <br><br>alexey@alexey-laptop:~/prg$ x86_64-linux-gnu-g++ second.cpp -o second <br />second.cpp:2:21: фатальная ошибка: windows.h: Нет такого файла или каталога компиляция прервана. <br />alexey@alexey-laptop:~/prg$ i686-w64-mingw32-g++ second.cpp -o second.exe <br />alexey@alexey-laptop:~/prg$ wineg++ second.cpp -o second<br><br>И здесь куча ошибок такого плана <a href="http://pastebin.com/46fwpmKS">http://pastebin.com/46fwpmKS</a><br><br>alexey@alexey-laptop:~/prg$ file second.exe <br />second.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit <br />alexey@alexey-laptop:~$ file second <br />second: ERROR: cannot open `second' (No such file or directory) <br />alexey@alexey-laptop:~/prg$ ./second.exe <br />Today is: 2011/11/5 <br />alexey@alexey-laptop:~/prg$<br><br>Для чего вообще нужен этот wineg++?<br><br>man wineg++ даёт: winegcc - Wine C and C++ MinGW Compatible Compiler<br><br>Так почему это C++ MinGW Compatible Compiler ничего не собирает?</p>]]></description>
</item>
</channel>
</rss>