Linux FIBL ошибка линковки

Вопросы программирования и использования среды Lazarus.

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

Linux FIBL ошибка линковки

Сообщение tria » 11.11.2018 00:18:56

CentOS 6.9
Lazarus 1.6.4

Использую в проекте FIBL
В нем есть использование клиентской библиотеки Firebird:
IBASE_DLL = {$IFDEF WIN32}'fbclient.dll'{$ELSE}'libfbclient.so.2'{$ENDIF};
function isc_start_multiple(...): ISC_STATUS; {$IFDEF WIN32}stdcall{$ELSE}cdecl{$ENDIF}; external IBASE_DLL;

Но при компиляции проекта выдает:
Debug: /usr/bin/ld: cannot find -lfbclient
project1.lpr(20,1) Error: Error while linking

Текст lfbclient вообще где-либо в пакете отсутствует.
tria
постоялец
 
Сообщения: 372
Зарегистрирован: 03.04.2006 11:24:10

Re: Linux FIBL ошибка линковки

Сообщение Vadim » 11.11.2018 06:22:57

tria
Попробуйте вместо конкретного названия библиотеки - 'libfbclient.so.2', подставить обобщённое имя - 'fbclient.so' или просто 'fbclient'.
Vadim
долгожитель
 
Сообщения: 3129
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Linux FIBL ошибка линковки

Сообщение Indigo80 » 11.11.2018 08:32:03

для ubuntu. sudo apt-install libfbclient2 ну в centOS наверно так sudo yum install libfbclient2
Последний раз редактировалось Indigo80 11.11.2018 08:36:27, всего редактировалось 1 раз.
Indigo80
незнакомец
 
Сообщения: 7
Зарегистрирован: 31.07.2012 11:24:06

Re: Linux FIBL ошибка линковки

Сообщение olegy123 » 11.11.2018 08:35:44

для Centos
https://pkgs.org/download/firebird-libfbclient

Добавлено спустя 2 минуты 49 секунд:
yum install firebird-libfbclient
olegy123
энтузиаст
 
Сообщения: 1192
Зарегистрирован: 25.02.2016 12:10:20

Re: Linux FIBL ошибка линковки

Сообщение tria » 12.11.2018 22:51:08

Забыл дописать.
libfbclient.so.2 установлен, это ссылка на libfbclient.so.2.5.7.
Вопрос в другом - почему пытается найти lfbclient, когда должен искать libfbclient.so.2?

Извиняюсь, что редко пишу - личный проект после работы.
tria
постоялец
 
Сообщения: 372
Зарегистрирован: 03.04.2006 11:24:10

Re: Linux FIBL ошибка линковки

Сообщение olegy123 » 13.11.2018 15:19:09

tria писал(а):Вопрос в другом - почему пытается найти lfbclient, когда должен искать libfbclient.so.2?

в сях линковка библиотек проходит с командой -l.. для fbclient в итоге будет -lfbclient, куда теряется знак или почему в названии присутствует еще буква. никто не знает.
olegy123
энтузиаст
 
Сообщения: 1192
Зарегистрирован: 25.02.2016 12:10:20

Re: Linux FIBL ошибка линковки

Сообщение mig-31 » 16.11.2018 14:52:22

Вам просто нужно создать сим линк
64-bit
Код: Выделить всё
ln -s /usr/lib64/libfbclient.so.2 /usr/lib64/libfbclient.so

32-bit
Код: Выделить всё
ln -s /usr/lib/libfbclient.so.2 /usr/lib/libfbclient.so

или прямо на библиотеку.
Так я делал на CentOS7(только 64-bit)
mig-31
постоялец
 
Сообщения: 193
Зарегистрирован: 14.07.2011 13:46:48

Re: Linux FIBL ошибка линковки

Сообщение tria » 16.11.2018 22:36:34

Чем мне поможет линк libfbclient.so если пишет, что не может найти fbclient?
Какого беня ищет fbclient, если текста "fbclient" вообще нет в директории исходников fibl?
tria
постоялец
 
Сообщения: 372
Зарегистрирован: 03.04.2006 11:24:10

Re: Linux FIBL ошибка линковки

Сообщение olegy123 » 16.11.2018 23:32:03

ldconfig -p|grep fbclient
что выдает
olegy123
энтузиаст
 
Сообщения: 1192
Зарегистрирован: 25.02.2016 12:10:20

Re: Linux FIBL ошибка линковки

Сообщение Vadim » 17.11.2018 05:41:21

tria
У Вас не ошибка компилятора, а ошибка линковщика, поэтому вопросы:
tria писал(а):Какого беня ищет fbclient, если текста "fbclient" вообще нет в директории исходников fibl?

смысла не имеют. ;-)
Я так понял, мой совет Вы полностью проигнорировали?
Vadim
долгожитель
 
Сообщения: 3129
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Linux FIBL ошибка линковки

Сообщение tria » 17.11.2018 16:49:49

Малость подразобрался.
Если подключать библиотеку libNameLib.so, то линковщик выдаст
Debug: /usr/bin/ld: cannot find -lNameLib

Т.е. ищет libNameLib.so, а пишет, что не находит NameLib.

Осталось разобраться, почему не находит libfbclient.so.2, который лежит в /usr/lib64 и есть ссылка на libfbclient.so.2.5.7

Vadim писал(а):tria
Я так понял, мой совет Вы полностью проигнорировали?

Совет не игнорировал, я в него не верил, но на всякий случай проверил - не работает.
tria
постоялец
 
Сообщения: 372
Зарегистрирован: 03.04.2006 11:24:10

Re: Linux FIBL ошибка линковки

Сообщение Vadim » 17.11.2018 18:54:01

tria писал(а):я в него не верил, но на всякий случай проверил - не работает.

Мы не в церкви и это не вопрос веры, а вопрос знаний. :-D На картинке снизу как раз нарисовано то, что я Вам сказал. Компилируется за милую душу.
У меня компилятор версии 3.0.4, а у Вас?

Добавлено спустя 8 минут 31 секунду:
Давайте тогда проверять, а где у Вас ищются библиотеки. Сначала загляните в /etc/ld.so.conf, потом в /etc/ld.so.conf.d/libs.conf, потом в файл fpc.cfg и проверить там ключи, которые начинаются на -Fl.

На всякий случай. Линковщик работает в стиле Си, поэтому когда он пишет "-lfbclient", то "-l" означает "библиотека", а всё остальное название библиотки. В Юниксах библиотеки, как правило, начинаются с префикса "lib", поэтому упоминание полного имени необязательно, это относится только к винде, где обязательной части имени просто не существует.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vadim
долгожитель
 
Сообщения: 3129
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Linux FIBL ошибка линковки

Сообщение olegy123 » 17.11.2018 23:13:51

может разные битности(x32/x64) библиотек и компилятора?
olegy123
энтузиаст
 
Сообщения: 1192
Зарегистрирован: 25.02.2016 12:10:20

Re: Linux FIBL ошибка линковки

Сообщение Vadim » 18.11.2018 05:34:07

olegy123 писал(а):может разные битности(x32/x64) библиотек и компилятора?

Такое обычно в винде бывает. В Linux'е обычно всё из репов ставится, спутать сложно. Судя по версии Лазаря и CentOS как раз всё из репов ставилось.
Хотя можно на всякий случай проверить...
Vadim
долгожитель
 
Сообщения: 3129
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Linux FIBL ошибка линковки

Сообщение zoltanleo » 19.11.2018 12:56:38

Не знаю, как в CentOS, но в Debian i386 в свое время намучался с FlameRobin, пока не разобрался.

А суть оказалась в том, что при статической линковке проги ищут библу (для i386) сначала в /usr/lib/i386-linux-gnu, а лишь потом в /usr/lib. Но симлинки с одинаковыми именами могут указывать на разные клиенты в разных местах (в упомянутом мною случае выше один libfbclient.so.2 "смотрел" на /usr/lib/i386-linux-gnu/libfbclient.so.2.5.3, а другой на /opt/firebird/lib/libfbclient.so.3.0.2). Причем, на Дебе после #apt-get update все ручные правки симлинков приходят в дефолтовое состояние, т.е. опять кажут не туда, пока не поправишь.

зы. не люблю ставить firebird из репов. Лучше инсталлятором, по-крайней мере знаешь, какая версия стоит и какого клиента цепляешь при коннекте
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 246
Зарегистрирован: 17.10.2013 10:55:01

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru