libfbclient.so.1.5.2 и версия libstdc++ под линуксом.

Установка базовых дистрибутивов, создание своих, распространение, установка автоматически и "вручную", файлы, необходимые для создания дистрибутивов.

Модераторы: kdv, Alexey Kovyazin

Ответить
Alex03
Сообщения: 15
Зарегистрирован: 16 ноя 2005, 19:02

libfbclient.so.1.5.2 и версия libstdc++ под линуксом.

Сообщение Alex03 » 27 дек 2005, 23:06

Итак! Имею Linux Mandrake 10.1 c установленным из дистрибутива fb1.5.2.

При компиляции клиенского приложения, которое будет крутится на сервере линкер варнинг выдал:

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

/usr/bin/ld: warning: libstdc++.so.5, needed by /usr/lib/gcc/i586-mandrake-linux-gnu/3.4.1/../../../libfbclient.so, may conflict with libstdc++.so.6
Соответственно

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

$ ldd /opt/firebird/lib/libfbclient.so
        linux-gate.so.1 =>  (0xffffe000)
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0xb7eb5000)
        libncurses.so.5 => /lib/libncurses.so.5 (0xb7e72000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7e45000)
        libm.so.6 => /lib/tls/libm.so.6 (0xb7e22000)
        libc.so.6 => /lib/tls/libc.so.6 (0xb7d03000)
        libdl.so.2 => /lib/libdl.so.2 (0xb7d00000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7cee000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7ce5000)
        libgpm.so.1 => /lib/libgpm.so.1 (0xb7cdf000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
А моя прога компилится уже с libstdc++.so.6

Вопрос:
Может ли это стать действительно граблями, и стОит ли перекомпилять сервер (с клиентом) из исходников.
Насколько я понимаю клиентский интерфейс - чисто сишный, и по идее плюс-плюс-овые объекты/вызовы между клиентом и прогой не передаются но мало-ли?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 дек 2005, 23:50

если libc 5 конфликтует с libc 6, то это да, грабли, и перекомпиляция сервера - это под твою личную ответственность, если будут глюки, то они все твои, исключительно.

p.s. и после этого еще кто-то будет бурчать, что Linux - проще виндов...

Alex03
Сообщения: 15
Зарегистрирован: 16 ноя 2005, 19:02

Сообщение Alex03 » 28 дек 2005, 12:42

kdv писал(а):если libc 5 конфликтует с libc 6, то это да, грабли, и перекомпиляция сервера - это под твою личную ответственность, если будут глюки, то они все твои, исключительно.
Не libc а libstdc++, т.е. стандартная С++ либа.
И не конфликтует, а возможно что будет конфликтовать.
Пример такого конфликта для моего случая:
1. fbclient.so создаёт объект stl::string (используя libstdc++.so.5 с которой он скомпилён)
2. Моя прога получает указатель на этот объект и работает с ним используя libstdc++.so.6 с которой она скомпилирована.
Вот тут то и возможны грабли в случае если изменена структура объекта и/или его методы между этими либами.

НО! (Повторюсь)
Насколько я понимаю клиентский интерфейс fbclient - чисто сишный, и плюс-плюс-овые объекты/вызовы между клиентом и прогой не передаются, так что проблем не будет. Но в этом утверждении я пока уверен лишь на 99%, а про оставшийся 1% и спрашивал! :)

p.s. и после этого еще кто-то будет бурчать, что Linux - проще виндов...
Я могу побурчать! :) Многие вещи мне лично проще сделать под линуксом. Плюсы и минусы есть и там и там.
Тем более что указанная проблема может иметь место и под виндой, например часть проекта (проги) пользует одну версию stl, а часть другую. Только под виндой ИМХО ни один линкер об этом не скажет, ибо на этапе линковки линкеры на зависимости DLL-ок не смотрят.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 дек 2005, 12:54

Насколько я понимаю клиентский интерфейс fbclient - чисто сишный, и плюс-плюс-овые объекты/вызовы между клиентом и прогой не передаются, так что проблем не будет.
именно так.

Ответить