Кросс из Линукса в Вин

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Сообщение shade » 22.05.2007 09:28:16

Продолжим ;)

Итак, кросс компиляция работает замечательно, но остался еще один момент - динамические библиотеки: попробовал кросс-компилировать своей проект из Windows в Linux и получил ошибку компоновщика - не найдена библиотека sqlite3:
D:\sys\bin\i386-linux-ld.exe: cannot find -lsqlite3


Насколько я знаю, в Linux используется два типа библиотек: собственно библиотека (используемая для исполнения) и девелоперская (используемая для компиляции).

В связи с этим пару вопросов:
1. Зачем вообще нужно это деление?
2. Можно ли девелоперскую библиотеку заменить на обычную?
3. Можно ли по обычной библиотеке получить девелоперскую (как например делает implib из TASM, если не ошибаюсь)?
4. Какие проблемы могут быть из-за различий версий библиотек и их имен (н-р, я скачал sqlite-3.3.17.so, чую, что ее нужно как-то переименовать, хотя бы добавить префикс lib...)

Добавлено
Переименовал sqlite-3.3.17.so в libsqlite3.so и положил в папку с проектом. Компоновщик ее нашел, но не нашел (где бы он ее взял) libc.so.6 - не уже ли нужно все зависимые библиотеки иметь?

Попробовал указать опцию -st (чтобы отменить компоновку, и сгенерировать скрипт для компоновки на целевой машине) посморел *.res файл, и что вы думаете? начало:
Код: Выделить всё
SEARCH_DIR(D:\pp\units\i386-linux\rtl\)
SEARCH_DIR(D:\pp\units\i386-linux\zvt\)
SEARCH_DIR(D:\pp\units\i386-linux\zlib\)
....

Пути менять похоже прийдется... да и версии RTL/FCL могут не совпать...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Alexander » 22.05.2007 18:55:40

Насчёт пути Вин в Линукс не могу подсказать. Не знаю.

Девелоперских библиотек в Линуксе не существует, есть девелоперские
пакеты (dev). В них заголовочные файлы и прочее, вроде сдк.Без них ни как, внурти самих библиотек этой информации нет. А библиотеки бывают
динамическими и статическими. Последние нужны для статической
линковки, их может и не быть вообще.

Ещё есть отладочные версии (dbg) программ (не обстрипанные итд),
но это вообще особый случай.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 823
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение shade » 22.05.2007 20:33:29

Alexander писал(а):Девелоперских библиотек в Линуксе не существует, есть девелоперские
пакеты (dev). В них заголовочные файлы и прочее, вроде сдк.Без них ни как, внурти самих библиотек этой информации нет.

Знаю, что не правильно выразился, но аналогия должна быть понятной.
У меня почти нет опыта программированния под Linux, поэтому приведу пример как Windows:
Если библиотека sqlite3.dll, нам нужно ее подключить к проекту. FPC/Dephi делают это за милую душу ничего не требуя от программиста. А вот с компиляторами С/C++ дело обстоит иначе (покрайней мере для M$ Visuall C++) - для компиляции сам sqlite3.dll не нужна, нужна библиотека (как бы ее обозвать?..) импорта (то, что я подразумевал под девелоперской) sqlite3.lib - которая, по сути обычная статическая библиотека содержащая импорт всех функций. В частности, когда на M$ VC компилируешь динамическую библиотеку создается три выходных файла: 1 - собственно *.dll, 2 - библиотека импорта *.lib, 3 - объектный файл *.exp (кажись тоже для импорта). Библиотеку импорта можно получить, если чего не путаю с помощью компоновщика M$ link..

Точно та же ситуация когда пишешь на ассемблере, в том числе TASM. В пакете TASM идет утилита implib которая на основе *.dll производит библиотеку импорта *.lib

Так, вот я полагю, что здесь таже ситуация, т.к. по опыту без девелоперских пакетов ld (ему, как и FPC на чхать на заголовочные файлы, если что...) отказывается компоновать проект без небольшого шаманства, из чего я заключаю, что при установке девелоперских библиотек устанавливаются те самые библиотеки "импорта"

Alexander писал(а):А библиотеки бывают динамическими и статическими. Последние нужны для статической
линковки, их может и не быть вообще.

Речь идет о динамических..

Добавлено
FPC под Win для подлючения динамической библиотеки сам создает ту самую библиотеку импорта, наример, в моем проекте он создал libimpSQLite3.a - что есть? - статическая библиотека - как думаете что содержит? - импорт функций...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Alexander » 22.05.2007 22:49:33

Да, точно там есть ,а файлы. И заголовочные тоже. Я посмотрел с
помощью МС дев пакет. Также там есть симлинки .so, указывающие на
файлы .so.X где X число (номер версии). Ну и документация тоже.

Тогда я не удивлюсь, что есть способ конвертации. И не сделано ли это
разделение, чтобы недевелоперские можно было обстрипать ?
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 823
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Attid » 08.11.2007 00:11:50

ну еще раз из линукса в венду
имеем установленый фпц в линуксе и папку /usr/src/fpcsrc

для начало проверяем что все работает
Код: Выделить всё
make clean all
make install


после этого видим что у нас появилось\обновилось
Код: Выделить всё
/usr/local/lib/fpc/2.2.0


компелируем юниты под венду
Код: Выделить всё
make OS_TARGET=win32 build
make OS_TARGET=win32 install


обнаруживаем появление
Код: Выделить всё
/usr/local/lib/fpc/2.2.0/units/i386-win32


делаем проверку
Код: Выделить всё
fpc -TWin32 testreg1.pp
wineconsole ./testreg1.exe


видим что все собирается и работает.

теперь переходим в папку лазаря
Код: Выделить всё
make OS_TARGET=win32 all


у меня вызвало ошибку в /lazarus/ide но так как иде мне не нужно и lcl собралось, я на неё забил.

проверяем на серьзном проэкте

сначало компоненты
Код: Выделить всё
./lazbuild --ws=win32 ../project/doublecmd/components/viewer/viewerpackage.lpk
./lazbuild --ws=win32 ../project/doublecmd/components/KASToolBar/kascomp.lpk


теперь сам проэкт
Код: Выделить всё
fpc  -S2cdgi -OG3 -TWin32 -g -gl -vewnhi -l -Fu/at/project/doublecmd/components/viewer/lib/i386-win32/ -Fu../../lazarus/components/synedit/units/i386-win32/ -Fu../../lazarus/components/jpeg/lib/i386-win32/ -Fucomponents/KASToolBar/lib/i386-win32/ -Fu../../lazarus/lcl/units/i386-win32/ -Fu../../lazarus/lcl/units/i386-win32/win32/ -Fu../../lazarus/packager/units/i386-win32/ -Fu. -odoublecmd.exe -dLCL -dLCLwin32 doublecmd.lpr


получаю
doublecmd.lpr(92,1) Error: resource compiler not found, switching to external mode
Linking doublecmd.exe
doublecmd.lpr(92,1) Error: Can't open object file: fpc-res.or
doublecmd.lpr(92,1) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted


что не так ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Alexander » 08.11.2007 14:59:37

Attid писал(а):получаю

Цитата:doublecmd.lpr(92,1) Error: resource compiler not found, switching to external mode

Linking doublecmd.exe

doublecmd.lpr(92,1) Error: Can't open object file: fpc-res.or

doublecmd.lpr(92,1) Fatal: There were 2 errors compiling module, stopping

Fatal: Compilation aborted


что не так ?


Ресурсы, видимо, хочет прикомпилировать, а некий fpc-res не видит.

Это проблемы Лазаруса. Надо точно знать последовательность
его работы, тогда и будет понятно что делать.

МСЕ проекты собираются нормально.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 823
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Максим » 09.11.2007 01:57:11

Судя по всему, здесь нужен windres из win32-binutils.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 598
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Attid » 09.11.2007 10:40:09

да это ресурсы. лазарус не причем. добавь в МСЕ иконку и попробуй.

я виндрес от 2,0,4 пробывал не помогло.
как от 2,2,0 собрать не догнал =(
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Alexander » 09.11.2007 23:32:45

Attid писал(а):да это ресурсы. лазарус не причем. добавь в МСЕ иконку и попробуй.


А как ? Для окна назначил, сработало. А где для программы добавлять ?
В настройках проекта вроде нет.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 823
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Attid » 10.11.2007 12:48:17

тут обсуждали. надо не забыть в фак вынести.
http://freepascal.ru/forum/viewtopic.php?t=1989
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Пред.

Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru