Кросскомпиляция- как?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Кросскомпиляция- как?

Сообщение FedeX » 08.07.2007 17:03:14

Ну, собственно, вопрос в теме.
Установил Лазаря под Ubuntu 7.04, установил пакет fpc-crosswin. Открыл свой существующий проект (написанный без использования компонентов, только модуль Windows). В меню Project->Compiler Options->Code->TargetOS поставил Win32. Ну и жду, собственно, кросскомпиляции :) А оно мне в ответ: "error while linking". :?
Погуглив ничего не нашол, (кроме одной уже весьма старой статьи, но в ней ничего не понял :oops: ).
Лазарь 0.9.22 beta.
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение shade » 08.07.2007 17:08:45

см. сначала:
http://freepascal.ru/article//raznoe/20070512172316/
http://freepascal.ru/forum/viewtopic.php?t=2026&start=0
http://freepascal.ru/forum/viewtopic.php?t=2417

PS: какую-то дополнительную информацию можно также почерпнуть из черновика новой статьи, многое повторяется, но есть и дополнительная информация...
http://the1st.adygnet.ru/~ftp/pub/draft/fpc_cross2.doc
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение FedeX » 08.07.2007 18:01:19

Спасибо, читаю!

...но, кажется всё проще. Щас попробовал скомпилить более простую программу, вроде:

program project1;
uses Windows;
begin
MessageBox(0,'Hello',nil,0);
end.
и скомпилилось! и запускается под Вине безо всяких доп.шаманств.

А мой проект, наверно вся беда в том, что это длл. Причём как-то, не пойму, что я сделал, но теперь длл компилится, но не работает. А ещё странно то, что при компилинге пишет:
/usr/bin/fpc-i386-win32-dlltool: Unable to open object file:
но длл в папке с проектом всё-равно появляется))
я сейчас mingw32-binutils установил, может это дало? :roll:
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение shade » 08.07.2007 20:07:59

FedeX писал(а):...но, кажется всё проще.

Действительно, все можно сделать проще, если есть скомпилированный пакет для кросс-компиляции. Это - легкий путь, и его нужно будет описать в новой статье. Тем не менее, шаманство может пригодиться: имея исходники FPC и соответствующий binutils - можно осуществить любую кросс-компиляцию и знать, где искать ошибки, если что-то идет не так. В общем шаманство для шаманов - легкий путь, для тех кому "побыстрей бы"

FedeX писал(а):А мой проект, наверно вся беда в том, что это длл.

попробуйте на тривиальной dll...
Может быть вы использовали -FE (или что-то в этом роде) для переопределения места dll? помниться где-то на форуме была подобная проблема (вроде даже никак не связанная с кросс-компиляцией). Если так, то возможно это баг FPC (выдает ошибочный путь для dlltool), о котором естественно нужно сообщить в багтрекер..

FedeX писал(а):но длл в папке с проектом всё-равно появляется

если не ошибаюсь, то dlltool работает с уже готовой dll и если вам нужно лишь только dll, то можно проигнорировать эту ошибку

FedeX
Если хотите можете внести свой вклад в написание статьи:
1. Приведите ссылку на fpc-crosswin
2. Можете попробовать описать "легкий путь"
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение FedeX » 08.07.2007 21:12:27

shade
Спасибо вам за советы.
fpc-crosswin я брал тут:
http://sourceforge.net/project/showfile ... p_id=89339

там же взял и Лазаруса, и сам FPC и его исходники... Всё прямо в *.deb пакетах.

Можете попробовать описать "легкий путь"


В Установленном Лазарусе меняю только одну настройку (указание целевой платформы), и мелкие экзешники компилятся... Вот собственно и всё описание)) Еслиб ещё и длл как надо скомпилилась (хотя я ещё попробую то, что вы посоветовали), то былоб вообще хорошо! Можно сказать, что это супер лёгкий путь :wink: . Ну разве что качать много надо...
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX » 09.07.2007 17:02:46

Теперь всё понятно. Длл тоже компилируются, (несмотря на выкрики dlltool об ошибке) и вполне работают. А моя не работала почему-то потому, что я использовал среди прочих модуль DirectInput.pas из Project JEDI. Не знаю почему так получается, но как только я подключаю к проекту (длл или ехе) в uses этот модуль, и даже не пишу никакого кода, то всё компилируется, но не работает. Может кросс-компилер (линкер), неумеет компилировать(линковать) СОМ интерфейсы? Хотя, к примеру ole2.pas подключается и ничего страшного...
Ладно - буду пытаться обойтись без DirectInput-а.... :roll:
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение Cheb » 18.07.2007 02:17:31

/usr/bin/fpc-i386-win32-dlltool: Unable to open object file:

Это какой-то эзотерический баг в бинутилсах. Я долго пытался достучаться, все молчат. Крутил так, этак... Сообщения ошибках лезли самые загадочные, хоть всё и работало.

В конце концов, написал враппер:

Код: Выделить всё
program fpc_i386_win32_dlltool;
{$mode objfpc}{$H+}
uses
  Classes, SysUtils, Process;
  var
    i: integer;
    s: ansistring;
    AProcess: TProcess;
begin
  s:=ParamStr(1);
  For i:=2 to ParamCount() do
    s:=s + ' ' + ParamStr(i);
  WriteLn('wrapping: fpc-i386-win32-dlltool ', s);
  AProcess:=TProcess.Create(nil);
  AProcess.CommandLine := 'fpc-i386-win32-dlltool-orig '+ s;
  AProcess.Options := AProcess.Options + [poWaitOnExit];
  AProcess.Execute;
  AProcess.Free;
end.


и подменил им /usr/bin/fpc-i386-win32-dlltool , соответственно оригинальный переименовав в fpc-i386-win32-dlltool-orig . И всё вылечилось.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32

Рейтинг@Mail.ru