Linux FIBL ошибка линковки
Модератор: Модераторы
Linux FIBL ошибка линковки
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 вообще где-либо в пакете отсутствует.
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
Попробуйте вместо конкретного названия библиотеки - 'libfbclient.so.2', подставить обобщённое имя - 'fbclient.so' или просто 'fbclient'.
Попробуйте вместо конкретного названия библиотеки - 'libfbclient.so.2', подставить обобщённое имя - 'fbclient.so' или просто 'fbclient'.
для ubuntu. sudo apt-install libfbclient2 ну в centOS наверно так sudo yum install libfbclient2
Последний раз редактировалось Indigo80 11.11.2018 07:36:27, всего редактировалось 1 раз.
для Centos
https://pkgs.org/download/firebird-libfbclient
Добавлено спустя 2 минуты 49 секунд:
yum install firebird-libfbclient
https://pkgs.org/download/firebird-libfbclient
Добавлено спустя 2 минуты 49 секунд:
yum install firebird-libfbclient
Забыл дописать.
libfbclient.so.2 установлен, это ссылка на libfbclient.so.2.5.7.
Вопрос в другом - почему пытается найти lfbclient, когда должен искать libfbclient.so.2?
Извиняюсь, что редко пишу - личный проект после работы.
libfbclient.so.2 установлен, это ссылка на libfbclient.so.2.5.7.
Вопрос в другом - почему пытается найти lfbclient, когда должен искать libfbclient.so.2?
Извиняюсь, что редко пишу - личный проект после работы.
tria писал(а):Вопрос в другом - почему пытается найти lfbclient, когда должен искать libfbclient.so.2?
в сях линковка библиотек проходит с командой -l.. для fbclient в итоге будет -lfbclient, куда теряется знак или почему в названии присутствует еще буква. никто не знает.
Вам просто нужно создать сим линк
64-bit
32-bit
или прямо на библиотеку.
Так я делал на CentOS7(только 64-bit)
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)
Чем мне поможет линк libfbclient.so если пишет, что не может найти fbclient?
Какого беня ищет fbclient, если текста "fbclient" вообще нет в директории исходников fibl?
Какого беня ищет fbclient, если текста "fbclient" вообще нет в директории исходников fibl?
ldconfig -p|grep fbclient
что выдает
что выдает
tria
У Вас не ошибка компилятора, а ошибка линковщика, поэтому вопросы:
смысла не имеют.
Я так понял, мой совет Вы полностью проигнорировали?
У Вас не ошибка компилятора, а ошибка линковщика, поэтому вопросы:
tria писал(а):Какого беня ищет fbclient, если текста "fbclient" вообще нет в директории исходников fibl?
смысла не имеют.
Я так понял, мой совет Вы полностью проигнорировали?
Малость подразобрался.
Если подключать библиотеку libNameLib.so, то линковщик выдаст
Debug: /usr/bin/ld: cannot find -lNameLib
Т.е. ищет libNameLib.so, а пишет, что не находит NameLib.
Осталось разобраться, почему не находит libfbclient.so.2, который лежит в /usr/lib64 и есть ссылка на libfbclient.so.2.5.7
Совет не игнорировал, я в него не верил, но на всякий случай проверил - не работает.
Если подключать библиотеку 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 писал(а):я в него не верил, но на всякий случай проверил - не работает.
Мы не в церкви и это не вопрос веры, а вопрос знаний.
У меня компилятор версии 3.0.4, а у Вас?
Добавлено спустя 8 минут 31 секунду:
Давайте тогда проверять, а где у Вас ищются библиотеки. Сначала загляните в /etc/ld.so.conf, потом в /etc/ld.so.conf.d/libs.conf, потом в файл fpc.cfg и проверить там ключи, которые начинаются на -Fl.
На всякий случай. Линковщик работает в стиле Си, поэтому когда он пишет "-lfbclient", то "-l" означает "библиотека", а всё остальное название библиотки. В Юниксах библиотеки, как правило, начинаются с префикса "lib", поэтому упоминание полного имени необязательно, это относится только к винде, где обязательной части имени просто не существует.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
может разные битности(x32/x64) библиотек и компилятора?
olegy123 писал(а):может разные битности(x32/x64) библиотек и компилятора?
Такое обычно в винде бывает. В Linux'е обычно всё из репов ставится, спутать сложно. Судя по версии Лазаря и CentOS как раз всё из репов ставилось.
Хотя можно на всякий случай проверить...
Не знаю, как в 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 из репов. Лучше инсталлятором, по-крайней мере знаешь, какая версия стоит и какого клиента цепляешь при коннекте
А суть оказалась в том, что при статической линковке проги ищут библу (для 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 из репов. Лучше инсталлятором, по-крайней мере знаешь, какая версия стоит и какого клиента цепляешь при коннекте
