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

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

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

Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Продолжим ;)

Итак, кросс компиляция работает замечательно, но остался еще один момент - динамические библиотеки: попробовал кросс-компилировать своей проект из 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 могут не совпать...
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

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

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

Ещё есть отладочные версии (dbg) программ (не обстрипанные итд),
но это вообще особый случай.
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

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 - что есть? - статическая библиотека - как думаете что содержит? - импорт функций...
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

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

Тогда я не удивлюсь, что есть способ конвертации. И не сделано ли это
разделение, чтобы недевелоперские можно было обстрипать ?
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

ну еще раз из линукса в венду
имеем установленый фпц в линуксе и папку /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


что не так ?
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

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 не видит.

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

МСЕ проекты собираются нормально.
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

Судя по всему, здесь нужен windres из win32-binutils.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

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

я виндрес от 2,0,4 пробывал не помогло.
как от 2,2,0 собрать не догнал =(
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

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


А как ? Для окна назначил, сработало. А где для программы добавлять ?
В настройках проекта вроде нет.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

тут обсуждали. надо не забыть в фак вынести.
http://freepascal.ru/forum/viewtopic.php?t=1989
Ответить