Сборка программы под Linux на FPC

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

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

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

Сообщение Attid »

угу попробуй с помощью filemon выследить какие файлы и где ищет.
AlexSuv
новенький
Сообщения: 16
Зарегистрирован: 02.09.2007 04:22:12

Сообщение AlexSuv »

shade писал(а):Под линухом скомпилировалось? работает?

Да, с первого раза без проблем.

shade писал(а):
AlexSuv писал(а):выдает более отсмысленные типа: "undefined reference to:" ... что говорит что мы на верном пути, и просто библиотека немного не подходит,

А подробнее, что там undefined...
Если libpthread использует другую библиотеку, например туже libc, то она вроде также должна присутствовать. Вобщем нужны все библиотеки используемые непосредсвенно, и вподе все используемые косвенно...

./libpthread.so: undefined reference to `free@GLIBC_2.0'
./libpthread.so: undefined reference to `__setmntent@GLIBC_2.2'
./libpthread.so: undefined reference to `_dl_allocate_tls_init@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `_setjmp@GLIBC_2.0'
./libpthread.so: undefined reference to `_rtld_global@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `__libc_pthread_init@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `__getmntent_r@GLIBC_2.2'
./libpthread.so: undefined reference to `mprotect@GLIBC_2.0'
./libpthread.so: undefined reference to `__libc_allocate_rtsig_private@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `sched_yield@GLIBC_2.0'
./libpthread.so: undefined reference to `calloc@GLIBC_2.0'
./libpthread.so: undefined reference to `getrlimit@GLIBC_2.2'
./libpthread.so: undefined reference to `_res@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `__libc_thread_freeres@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `__getpagesize@GLIBC_2.0'
./libpthread.so: undefined reference to `__mempcpy@GLIBC_2.0'
./libpthread.so: undefined reference to `_dl_deallocate_tls@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `__sched_get_priority_min@GLIBC_2.0'
./libpthread.so: undefined reference to `fchmod@GLIBC_2.0'
./libpthread.so: undefined reference to `__libc_longjmp@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `memset@GLIBC_2.0'
./libpthread.so: undefined reference to `__libc_system@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `errno@GLIBC_PRIVATE'
./libpthread.so: undefined reference to `unlink@GLIBC_2.0'

после добавления опции -Xc ошибки пропадают, компиляция проходит без проблем, но код вырастает в 2 раза и выдает segmentation fault при запуске.
AlexSuv
новенький
Сообщения: 16
Зарегистрирован: 02.09.2007 04:22:12

Сообщение AlexSuv »

Attid писал(а):угу попробуй с помощью filemon выследить какие файлы и где ищет.


Лог filemon:

Код: Выделить всё

23:42:04   ld.exe:1340   OPEN   D:\FPC\UNITS\I386-LINUX\LIBC.SO.6   NOT FOUND   Options: Open  Access: 00000081   
23:42:04   ld.exe:1340   OPEN   D:\FPC\UNITS\I386-LINUX\LD-LINUX.SO.2   NOT FOUND   Options: Open  Access: 00000081   
23:42:04   ld.exe:1340   OPEN   D:\FPC\BIN\I386-WIN32\LIBPTHREAD.SO   NOT FOUND   Options: Open  Access: 00000081   


23:42:05   ld.exe:1340   OPEN   D:\FPC\bin\i386-win32\libpthread.so   NOT FOUND   Options: Open  Access: Read   
23:42:05   ld.exe:1340   OPEN   D:\FPC\bin\i386-win32\libpthread.a   NOT FOUND   Options: Open  Access: Read   


это если не ставить ни каких библиотек.
Если я ему подсовываю библиотеки:

libc.so.6
ld-linux.so.2
libpthread.so
libdl.so

то он находит все файлы, но выдает undefined reference to (лог в предыдущем посте).

Может библиотеки не подходят. Не мог бы кто выложить эти библиотеки (а может еще какие) на какую-нибудь рапиду с рабочей системы (на которой кросплатформленно компилируется под линукс). бул бы признателен. А то видно версии какие-то не те.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

вот мои библиатечки вытаскивал когда по кросу врывался из венды
http://rapidshare.com/files/53298633/lib.zip.html
но не гарантирую что от них все заработает.
я для себя решил делать крос только из линукса =)
AlexSuv
новенький
Сообщения: 16
Зарегистрирован: 02.09.2007 04:22:12

Сообщение AlexSuv »

Attid писал(а):вот мои библиатечки вытаскивал когда по кросу врывался из венды
http://rapidshare.com/files/53298633/lib.zip.html
но не гарантирую что от них все заработает.
я для себя решил делать крос только из линукса =)

Спасибо за библиотечки, но с ними та же история. :(

Даже уже и не знаю что делать. Можно конечно через линукс в виртуальной машине компилить (так я пока и делаю), но я просто не привык сдаваться.

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

Сообщение shade »

Если я ему подсовываю библиотеки:

libc.so.6
ld-linux.so.2
libpthread.so
libdl.so

то он находит все файлы, но выдает undefined reference to (лог в предыдущем посте).

Попробуй подсунуть
libc.a
libdl.a
libpthread.a
ну и so-шки оставь, мало ли...

ld-linux.a на своей машне не обнаружил, и возможно его нет в природе...
потому положим ld-linux.so.2
AlexSuv
новенький
Сообщения: 16
Зарегистрирован: 02.09.2007 04:22:12

Сообщение AlexSuv »

shade писал(а):libc.a
libdl.a
libpthread.a
ну и so-шки оставь, мало ли...

А где их взять-то. Я пробовал с разных линухов, дак размеры libpthread.a отличаются от 50 кб libpthread.a до 2-3-4 мб!
Mayor
новенький
Сообщения: 20
Зарегистрирован: 04.09.2007 16:55:14

Сообщение Mayor »

так ребята - немного по библиотекам лина:

ld-linux* - это динамический линкер статической версии не бывает - во всяком случае я не видел

для того чтобы слинковать с extern 'c', требуется libc*so , но учитывая то, что мы пока что при этом не способны правильно настроить ld, для линковки, нужно поставить libc*-dev пакет, который настроить ld самостоятельно ...

проверить это можно:

Код: Выделить всё

#include <stdio.h>
void main() {
   printf("hello world\n");
}


gcc hello.c

gcc поставить не забудьте тоже

если скомпилится хелло, значит скомпилится и паскаль с extern 'c'

посмотреть с какими библиотеками скопилилось можно чере ldd hello
Ответить