[freebsd] Динамическая линковка...

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

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

Ответить
Konstantin

Сообщение Konstantin »

Добрый день.

При создании разделяемой библиотеки на FreePascal (перенос UDF СУБД Firebird под FreeBSD)
возникли некоторые трудности - СУБД не видит экспортируемых функций.
Для тестирования была написана тестовая программа динамически вызывающая одну из функций
из этой библиотеки.
Так вот при загрузке dlopen ругается:

./libudfbtools.so: Undefined symbol "main"

Он, (main) таки undefined - линкуется из FPC-ного STUB-а, но библиотека грузится с
параметром RTLD_LAZY!

lib := dlopen ('./libudfbtools.so', 1);

FireBird-овская библиотека, в которой присутствуют неопределенные функции, грузится
нормально. Далее выяснилось, что если тестовую программу и библиотеку линковать с
параметром "-E" (ld), то всё OK.

Вопрос к знатокам: какой параметр линковщика, при создании динамической библиотеки,
"убирает ругню" rtld? (ну не пересобирать-же Firebird с "LDFLAGS=-E").


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

Сообщение STAKANOV »

Так вот при загрузке dlopen ругается:

./libudfbtools.so: Undefined symbol "main"

я функцию заглушку ставил, особо не разбираясь :rolleyes:
Константин

Сообщение Константин »

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

Сообщение STAKANOV »

Константин писал(а): Каким образом?

Добалял что-то вроде:

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

procedure mymain; alias : 'main';
begin
end;


Точно не помню, но по-моему так. Правда я не уверен, что это корректный способ :rolleyes:
Dmitry
новенький
Сообщения: 52
Зарегистрирован: 05.07.2005 08:53:06

Сообщение Dmitry »

А у линковщика параметр -lc стоит?
depo72
незнакомец
Сообщения: 6
Зарегистрирован: 30.05.2006 18:09:26

Сообщение depo72 »

Доброго времени суток.

Времена меняются, а проблемы остаются...
Столкнулся с такой же проблемой. Компилирую библиотеку, кладу в /usr/local/libexec/firebird/udf, но сервер не видит (говорит что "...module name or entrypoint could not be found"). Тестовый пример работает.
OS - FreeBSD 8.2
FPC - 2.7.1
Firebird - 2.5.1
Пните в нужном направлении, пожалуйста.
Ответить