Кросскомпиляция Win32->Linux с библиотеками libc, uClibc...

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

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

Кросскомпиляция Win32->Linux с библиотеками libc, uClibc...

Сообщение Sawer » 12.09.2008 20:44:09

Компилим из Win32 в Linux. С простыми примерами без дополнительных все ОК!

Теперь есть такая программа:
Код: Выделить всё
program test;

uses sockets, netdb, inifiles, classes, sysutils, strutils, blcksock, httpsend;

begin
  writeln('Hello world');
  readln;
end.


fpc.cfg:
Код: Выделить всё
-O2
-Xs
-Sgic
-Tlinux
-XPi386-linux-
-Xs
-viwn
-FDC:\FPC\2.2.2\bin\i386-linux
-FuC:\FPC\2.2.2\units\i386-linux\
-FuC:\FPC\2.2.2\units\i386-linux\*
-FuC:\FPC\2.2.2\units\i386-linux\rtl
-FuC:\FPC\extlib\powtils\main
-FuC:\FPC\extlib\synapse\lib
-FlC:\FPC\linux\lib
-kC:\FPC\linux\lib\ld-uClibc.so.0
-FL/lib/ld-uClibc.so.0


вывод компилера:
Код: Выделить всё
C:\FPC\projects>fpc test.pas
Target OS: Linux for i386
Compiling test.pas
Linking test
C:\FPC\2.2.2\bin\i386-linux\i386-linux-ld.exe: cannot find -ldl
test.pas(8,1) Error: Error while linking
test.pas(8,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: C:\FPC\2.2.2\bin\i386-Win32\ppc386.exe returned an error exitcode (normal if you did not specify a source file to be compiled)


либы лежат в папке C:\FPC\linux\lib:
Код: Выделить всё
ld-uClibc-0.9.29.so
ld-uClibc.so.0
libblkid.so
libblkid.so.1
libblkid.so.1.0
libc.so.0
libcom_err.so
libcom_err.so.2
libcom_err.so.2.1
libcrypt-0.9.29.so
libcrypt.so.0
libdl-0.9.29.so
libdl.so.0
libe2p.so
libe2p.so.2
libe2p.so.2.3
libext2fs.so
libext2fs.so.2
libext2fs.so.2.4
libm-0.9.29.so
libm.so.0
libnsl-0.9.29.so
libnsl.so.0
libpthread-0.9.29.so
libpthread.so.0
libresolv-0.9.29.so
libresolv.so.0
librt-0.9.29.so
librt.so.0
libss.so
libss.so.2
libss.so.2.0
libuClibc-0.9.29.so
libutil-0.9.29.so
libutil.so.0
libuuid.so
libuuid.so.1
libuuid.so.1.2


че? где? куда копать?
Sawer
новенький
 
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Re: Кросскомпиляция Win32->Linux с библиотеками libc, uClibc...

Сообщение Sergei I. Gorelkin » 12.09.2008 23:10:38

Как я понимаю, он ищет libdl.so и не находит, т.к. в списке такого нет. Если в линуксе это симлинк, указывающий на libdl.so.0, то при кросскомпиляции, наверное, нужно просто скопировать.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1398
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Кросскомпиляция Win32->Linux с библиотеками libc, uClibc...

Сообщение Sawer » 12.09.2008 23:16:23

Sergei I. Gorelkin писал(а):Как я понимаю, он ищет libdl.so и не находит, т.к. в списке такого нет. Если в линуксе это симлинк, указывающий на libdl.so.0, то при кросскомпиляции, наверное, нужно просто скопировать.

скопировал!
теперь выдает:
Код: Выделить всё
C:\FPC\projects>fpc test.pas
Target OS: Linux for i386
Compiling test.pas
Linking test
C:\FPC\linux\lib\/libdl.so: undefined reference to `getenv'
C:\FPC\linux\lib\/libdl.so: undefined reference to `malloc'
C:\FPC\linux\lib\/libdl.so: undefined reference to `fprintf'
C:\FPC\linux\lib\/libdl.so: undefined reference to `stderr'
C:\FPC\linux\lib\/libdl.so: undefined reference to `free'
test.pas(8,1) Error: Error while linking
test.pas(8,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: C:\FPC\2.2.2\bin\i386-Win32\ppc386.exe returned an error exitcode (normal if you did not specify a source file to be compiled)
Sawer
новенький
 
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Re: Кросскомпиляция Win32->Linux с библиотеками libc, uClibc...

Сообщение Alchemist » 02.10.2008 14:15:39

У меня на днях возникла эта-же проблема. Решение оказалось до крайности простое: большинство дистрибутивов Linux по-умолчанию не ставят *-devel-* пакеты, в которых находятся необходимые библиотечные файлы *.а для линковщика. С *.so файлами, соответственно это связано лишь отчасти. Поэтому когда ld ругается на -dl, -x11, и т.п. - всего навсего заходите в менеджер пакетов и до-устанавливаете или закачиваете соответствующий пакет, найдя его в менеджере простым поиском по ключевой подстроке.

Решение найдено на openSUSE 11, дефолтная установка (devel пакеты по-умолчанию не ставятся), FPC+Lazarus 0.9.24.

Успехов! ;)
Alchemist
незнакомец
 
Сообщения: 4
Зарегистрирован: 18.11.2006 17:40:30


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

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

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

Рейтинг@Mail.ru