Не работает library, debian arm

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

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

Не работает library, debian arm

Сообщение Дож » 25.03.2012 21:06:44

Пытаюсь создать динамическую библиотеку, но она не грузится.

Динамическая библиотека:
Код: Выделить всё
library test;

procedure func; stdcall;
begin
end;

exports
  func;

end.


Программа:
Код: Выделить всё
uses
  DynLibs;

var
  Handle: TLibHandle;

begin
  Handle := LoadLibrary(ParamStr(1));
  if Handle = NilHandle then
    Writeln('Cannot load lib ', ParamStr(1))
  else
    Writeln('Libary loaded');
  FreeLibrary(FHandle);
end.


Компиляция и запуск:
Код: Выделить всё
doj@dev:~/devel/lib$ fpc -Cg test.dpr
Free Pascal Compiler version 2.4.0-2 [2010/02/20] for arm
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Linux for ARMEL
Compiling test.dpr
Assembling test
Linking libtest.so
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
10 lines compiled, 0.6 sec

doj@dev:~/devel/lib$ fpc prog.dpr
Free Pascal Compiler version 2.4.0-2 [2010/02/20] for arm
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Linux for ARMEL
Compiling prog.dpr
Assembling program
Linking prog
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
18 lines compiled, 0.8 sec

doj@dev:~/devel/lib$ ./prog /usr/lib/libm.so
Library loaded

doj@dev:~/devel/lib$ ./prog libtest.so
Cannot load lib libtest.so
Runtime error 216 at $400C1FBC
  $400C1FBC
  $40312508


Видно, что сторонние библиотеки из /usr/lib/ грузятся, а только что созданные — нет. Операционная система — Debian, процессор — arm. Подозреваю, что это баг в компиляторе под arm.

Правильно ли я компилирую? Никто с подобным не сталкивался?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Не работает library, debian arm

Сообщение Vadim » 26.03.2012 01:57:51

Runtime error 216 - это попытка обратиться к тому, чего нет. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Не работает library, debian arm

Сообщение bormant » 26.03.2012 10:58:31

Дож писал(а):сторонние библиотеки из /usr/lib/ грузятся, а только что созданные — нет.


1) Либо загружать с полным путём:
$ ./prog ./libtest.so

либо сказать, где дополнительно искать библиотеки:
$ LD_LIBRARY_PATH=. ./prog libtest.so

либо предварительно уведомить линкер о местонахождении вновь созданной библиотеки и включить её в кэш (man ldconfig).

2) В логике программы ошибка: вызов FreeLibrary для Handle, равного NilHandle, с ожидаемым же результатом -- Runtime error 216 at ...
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Re: Не работает library, debian arm

Сообщение Дож » 26.03.2012 19:01:03

Vadim писал(а):Runtime error 216 - это попытка обратиться к тому, чего нет. ;)

Я же спрашиваю почему библиотека не грузитя, а не почему незагруженная библиотека не освобождается.


С полным путем пытался грузить и даже в /usr/lib клал -- не помогло.

Добавлено спустя 6 минут 3 секунды:
С переменной окружения тоже не грузится:
Код: Выделить всё
doj@dev:~/devel/lib$ LD_LIBRARY_PATH=. ./prog libtest.so
Cannot load lib libtest.so
Runtime error 216 at $4001AFBC
  $4001AFBC
  $40255508


Научиться собирать свежий компилятор из исходников что ли...
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Не работает library, debian arm

Сообщение Максим » 27.03.2012 02:15:41

Дож писал(а):С переменной окружения тоже не грузится:

После обновления LD_LIBRARY_PATH надо делать ldconfig, насколько я понимаю.

Дож писал(а):Научиться собирать свежий компилятор из исходников что ли...

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

Re: Не работает library, debian arm

Сообщение Дож » 27.03.2012 11:55:06

Я плохо знаком с ldconfig, правильно ли я все тут сделал?
Код: Выделить всё
doj@dev:~/devel/lib$ LD_LIBRARY_PATH=.
doj@dev:~/devel/lib$ echo $LD_LIBRARY_PATH
.
doj@dev:~/devel/lib$ sudo -- /sbin/ldconfig
doj@dev:~/devel/lib$ head /etc/ld.so.cache | grep libtest.so
Binary file (standard input) matches
doj@dev:~/devel/lib$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

doj@dev:~/devel/lib$ cat /etc/ld.so.conf.d/doj.conf
./


Это, естественно, не помогло.

Добавлено спустя 3 минуты 36 секунд:
Максим писал(а):
Дож писал(а):Научиться собирать свежий компилятор из исходников что ли...

Думаете, поможет? :)

Попытка -- не пытка. Выглядит как баг, может с 2.4 до 2.7 в какой-то момент исправили. А если баг и не исправили, то сам может буду искать -- динамические библиотеки-то хочется...

Но хочется этого избежать :)

Добавлено спустя 8 минут 25 секунд:
Пересобрал из исходников, помогло! :-D
Код: Выделить всё
doj@dev:~/devel/lib$ echo -Fu~/fpc/rtl/units/arm-linux > fpc.cfg
doj@dev:~/devel/lib$ ~/fpc/compiler/ppcarm -Cg test.dpr
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
doj@dev:~/devel/lib$ ./prog libtest.so
Library loaded
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47


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

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

Сейчас этот форум просматривают: Google [Bot] и гости: 6

Рейтинг@Mail.ru