UDF для FireBird 1.5 i 2.0

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

v6y
Сообщения: 78
Зарегистрирован: 12 мар 2005, 17:45

Re: UDF для FireBird 1.5 i 2.0

Сообщение v6y » 30 янв 2007, 11:32

Dimitry Sibiryakov писал(а):
v6y писал(а):Если так, то из какого, извиняюсь за выражение, места тогда должна вызываться ib_util_malloc?
В каком месте ее ld найдет, из такого она и загрузится - отвратительнейшее свойство линуксового загрузчика, которое некоторые считают фичей.
Только из уважения ограничусь короткой фразой: Дмитрий, ты не прав.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: UDF для FireBird 1.5 i 2.0

Сообщение Dimitry Sibiryakov » 30 янв 2007, 13:01

v6y писал(а):Только из уважения...
Да ладно, все тут и так знают, что Линух я видел только на картинках. Рассказывай, как тамошний загрузчик обрабатывает undefined symbols. (То, что тамошний линкер их разрешает, я знаю точно - иначе зачем ему ключ --no-undefined?..)

v6y
Сообщения: 78
Зарегистрирован: 12 мар 2005, 17:45

Re: UDF для FireBird 1.5 i 2.0

Сообщение v6y » 30 янв 2007, 14:59

Dimitry Sibiryakov писал(а):
v6y писал(а):Только из уважения...
Да ладно, все тут и так знают, что Линух я видел только на картинках. Рассказывай, как тамошний загрузчик обрабатывает undefined symbols. (То, что тамошний линкер их разрешает, я знаю точно - иначе зачем ему ключ --no-undefined?..)
Прежде всего объясни более детально смысл этой фразы:
В каком месте ее ld найдет, из такого она и загрузится - отвратительнейшее свойство линуксового загрузчика, которое некоторые считают фичей.
А то я ее скорее всего недопонял и понял так: в Виндусе загрузчик имеет прекрасное свойство грузить даже из тех мест в которых найти не может. :wink:

ib_util_malloc в данном случае не может быть найдена по определению - откуда загрузчику знать, что она находится именно в libib_util.so?

Рассказывать про загрузчик собственно нечего: man ld про линкер, man ld.so про загрузчик. Я думаю копипастить маны сюда смысла нет. Про опцию --no-undefined ты уже сам написал - в данном случае добавляешь к параметрам командной строки gcc -Wl,--no-undefined и оно начинает ругаться на ненайденные в указанных для линковки объектниках и шарах функции. Почему не ругается по умолчанию? Потому что предполагает, что соответсвующая шара или код будут подгружены к моменту вызова. Ничего крамольного в этом нет, IMHO, потому как в больших, многомодульных проектах позволяет избежать подключения одних и тех же шар и объектников при компиляции модулей.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: UDF для FireBird 1.5 i 2.0

Сообщение Dimitry Sibiryakov » 30 янв 2007, 15:34

v6y писал(а):Прежде всего объясни более детально смысл этой фразы:
Хорошо. Рассказываю какое у меня (скорее всего неправильное) представление о работе ld.so: есть конфигурационный файл, где перечислены пути к сошкам. Есть БД функций, экспортируемых этими сошками (иначе зачем запускать какой-то утиль при изменении конфигурации). Если вызывается какая-то внешняя функция, ld ищет ее имя в базе и (если нашел) грузит соответствующую сошку. Если функция с тем же названием экспортируется двумя библиотеками, будет задействована первая попавшаяся.

Помидоры?..

v6y
Сообщения: 78
Зарегистрирован: 12 мар 2005, 17:45

Re: UDF для FireBird 1.5 i 2.0

Сообщение v6y » 30 янв 2007, 18:26

Dimitry Sibiryakov писал(а):
v6y писал(а):Прежде всего объясни более детально смысл этой фразы:
Хорошо. Рассказываю какое у меня (скорее всего неправильное) представление о работе ld.so: есть конфигурационный файл, где перечислены пути к сошкам. Есть БД функций, экспортируемых этими сошками (иначе зачем запускать какой-то утиль при изменении конфигурации). Если вызывается какая-то внешняя функция, ld ищет ее имя в базе и (если нашел) грузит соответствующую сошку. Если функция с тем же названием экспортируется двумя библиотеками, будет задействована первая попавшаяся.

Помидоры?..
Ключевая "неправильность" твоего понимания:
В этой БД (я так полагаю ты имеешь ввиду ld.so.cache) имена функций НЕ ХРАНЯТСЯ, хранятся только пути к библиотекам.

SkyFox
Сообщения: 23
Зарегистрирован: 21 ноя 2006, 11:57

Сообщение SkyFox » 02 фев 2007, 12:02

Под Linux откомпилировал, пытаюсь под FreeBSD

в /usr/local/lib есть libib_util.so

компилирую
gcc udf.c -shared -lib_util -fPIC -o udf.so -I/usr/local/share/examples/firebird -I/usr/local/include -I/usr/local/lib

ответ:
/usr/bin/ld: cannot find -lib_util

Есть варианты с каким ключем надо компилировать?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 02 фев 2007, 12:09

SkyFox писал(а):Под Linux откомпилировал, пытаюсь под FreeBSD

в /usr/local/lib есть libib_util.so

компилирую
gcc udf.c -shared -lib_util -fPIC -o udf.so -I/usr/local/share/examples/firebird -I/usr/local/include -I/usr/local/lib

ответ:
/usr/bin/ld: cannot find -lib_util

Есть варианты с каким ключем надо компилировать?
Есть варианты как не путать lib_util и libib_util

SkyFox
Сообщения: 23
Зарегистрирован: 21 ноя 2006, 11:57

Сообщение SkyFox » 02 фев 2007, 12:27

hvlad писал(а):Есть варианты как не путать lib_util и libib_util
На Linux такой lib_util.so нет и всё успешно компилится и работает, за то хочет знать где libib_util.so, только тогда всё воркает.

У кого ещё варианты?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 02 фев 2007, 12:40

Как насчет такого? ld на фре не добавляет автоматически lib в начало библиотеки или .so в конец. Или на фре libib_util.so лежит не там где ее можно найти. Попробуй принудительно: -llibib_util.so -L/opt/firebird/lib

SkyFox
Сообщения: 23
Зарегистрирован: 21 ноя 2006, 11:57

Сообщение SkyFox » 02 фев 2007, 12:52

Dimitry Sibiryakov писал(а):Как насчет такого? ld на фре не добавляет автоматически lib в начало библиотеки или .so в конец. Или на фре libib_util.so лежит не там где ее можно найти. Попробуй принудительно: -llibib_util.so -L/opt/firebird/lib
Не помогло :(

v6y
Сообщения: 78
Зарегистрирован: 12 мар 2005, 17:45

Сообщение v6y » 02 фев 2007, 12:58

SkyFox писал(а):Под Linux откомпилировал, пытаюсь под FreeBSD

в /usr/local/lib есть libib_util.so

компилирую
gcc udf.c -shared -lib_util -fPIC -o udf.so -I/usr/local/share/examples/firebird -I/usr/local/include -I/usr/local/lib

ответ:
/usr/bin/ld: cannot find -lib_util

Есть варианты с каким ключем надо компилировать?
Самый простой метод - скопировать/слинковать libib_util.so в /usr/lib, затем на всякий запустить ldconfig и попробовать компильнуть с теми же ключами, что и под Линуксом.
Для справки:
-lsomelib - будет искатьсься libsomelib.so - почитайте man ld там все это написано
Также почитайте man ld.so - там указано каким образом ищутся билиотеки.

SkyFox
Сообщения: 23
Зарегистрирован: 21 ноя 2006, 11:57

Сообщение SkyFox » 02 фев 2007, 13:09

v6y - ещё раз спасибо, откомпилировал под FreeBSD!

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 10 фев 2007, 21:53

Да... прочитал я эту тему... много чего почерпнул про фрю.
v6y - объявляю благодарность. :D

Ответить