Dynlibs - не работает на FreeBSD ?

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

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

Сообщение STAKANOV » 16.10.2005 16:24:20

Не могу понять, если линкуюсь с динамической библиотекой на этап компиляции то все ОК. А если пытаюсь загрузить ее с помощью функций dynlibs, то березултаттно

Вариант 1 (работает)
Код: Выделить всё
program PBS;
uses PBSShare, PBSLog, crt;
procedure ConnectionManagerMain;external 'ConnectionHandler';
begin
SysMessage('Загружаем менеджер соедеинений');
ConnectionManagerMain;
repeat
 delay(500);
until KeyPressed;
end.


Варинат 2 (не работает)
Код: Выделить всё
program PBS;
uses PBSShare, PBSLog, crt, dynlibs;
type
TProc=procedure;
PProc=^TProc;

var
CHLib:TlibHandle;
ConnectionManagerMain:TProc;
begin
SysMessage('Загружаем менеджер соедеинений');
CHLib:=LoadLibrary('libConnectionHandler.so');
if CHLib=NILHandle then
begin
 SysMessage('Не могу загрузить менеджер соединений');
 Halt(1);
end;
ConnectionManagerMain:=PProc(GetProcAddress(CHLib, 'ConnectionManagerMain'))^;
ConnectionManagerMain;
repeat
 delay(500);
until KeyPressed;
UnloadLibrary(CHLib);
end.


Функция LoadLibrary возвращает NIL. Смущяет меня тот факт, чтоесли указать какуюнибудь из не моих библиотека (например libxml2.so), то она загружается!!!!

Кратко сама библиотека:
Код: Выделить всё
{$SMARTLINK OFF}
library ConnectionHandler;
uses sockets, baseunix, crt, PBSLog, PBSShare;
... здесь всякие другие функции и тп
{------------------------------------------------------------}
procedure ConnectionManagerMain;
...
begin
...
end;

exports  ConnectionManagerMain;

end.

Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение Иван Шихалев » 17.10.2005 01:10:30

Хорошо б каким-нибудь objdump'ом посмотреть, какое имя экспортируется. Могут быть заморочки, например, с регистром символов.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение STAKANOV » 17.10.2005 10:39:11

Иван Шихалев писал(а): Хорошо б каким-нибудь objdump'ом посмотреть, какое имя экспортируется. Могут быть заморочки, например, с регистром символов.

А при чем тут это? Не загружается функцией LoadLibrary библиотека, а что там дальше это по-моему уже другой вопрос. :)
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение Иван Шихалев » 18.10.2005 00:11:46

Код: Выделить всё
LoadLibrary('ConnectionHandler')
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение STAKANOV » 18.10.2005 10:13:30

Иван Шихалев писал(а):
Код: Выделить всё
LoadLibrary('ConnectionHandler')

Я с этого начал :( Повторюсь, почему-то не загружается именно написанная мною библиотека (например libxml2.so загружается). Собранную библиотеку я помещаю в /usr/local/lib и запускаю ldconfig -R.

Сейчас пробовал на простых примерах эффект - никакой :(

Вызывающий код(полностью):
Код: Выделить всё
{$smartlink off}
program tmylib;
uses dynlibs, crt;
type
TProc=procedure;
PProc=^TProc;

var
CHLib:TLibHandle;
MyFunc:TProc;

begin
CHLib:=LoadLibrary('mylib');
if CHLib=nil then
begin
 writeln('не загрузили');
 halt(1);
end;
MyFunc:=PProc(GetProcAddress(CHLib,'MyFunc'))^;
if @MyFunc<>nil then MyFunc;
repeat
 delay(500);
until KeyPressed;
UnloadLibrary(MyFunc);
end.


Библиотека(полностью):
Код: Выделить всё
{$smartlink off}
library MyLib;

procedure MyFunc;
begin
 Writeln('bbbb');
end;

exports MyFunc;

end.


И на всяки случай файл ~/.fpc.cfg
Код: Выделить всё
-Sgic
-CX
-Fu/usr/local/lib/fpc/2.0.0/units/$fpctarget
-Fu/usr/local/lib/fpc/2.0.0/units/$fpctarget/*
-Fu/usr/local/lib/fpc/2.0.0/units/$fpctarget/rtl
-Fu/usr/home/stakan/units/*
-Fu*
-Fl/usr/local/lib
-FD/usr/home/stakan/fpc/$fpctarget/bin
#-Xs
-XX
-l
-viwn
-Xf
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград


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

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

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

Рейтинг@Mail.ru