LINUX.ORG.RU

Не удаётся запустить приложение из-за отсутствующей библиотеки.

 


0

1

После компиляции библиотеки и её дальнейшего использования возникает ошибка:

LoadLibrary failed on /home/get/platform/./test/dlls/test.so: ./libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/get/platform/./test/dlls/test.so)

Статично слинковать нет возможности. Какие есть альтернативы решения данной проблемы? На GCC 4.9 подобного не возникает, только на GCC 5.X. ps Ubuntu 16.04

p.s. Это более важно... С GLIBCXX_3.4.21 хоть как-то костылём в виде вырезания кода удалось решить, но это уже никак:

./libstdc++.so.6: version `CXXABI_1.3.8' not found

★★

Последнее исправление: BitSum (всего исправлений: 4)

У тебя libstdc++.so.6 лежит там рядом с твоей библиотекой, что ли? Зачем? Откуда она? Какой версии?

tiandrey ★★★★★
()
Ответ на: комментарий от tiandrey

Изначально программа требовала libstdc++.so.6, установил.

Либу больше не требовала, зато теперь просит другие. Из репозиториев убунту:

apt-get -y install lib32stdc++6

lib32stdc++6 is already the newest version (5.4.0-6ubuntu1~16.04.2).

BitSum ★★
() автор топика
Ответ на: комментарий от BitSum

Ну я тебе как КО подсказываю, что lib32stdc++6 - это 32-битная версия этой библиотеки.

Давай уже рассказывай, что ты там ставишь, что компилируешь.

tiandrey ★★★★★
()
Ответ на: комментарий от BitSum

Ну окей, предположим, ты всё правильно сделал, скачал, поставил.

Вопрос №1 - почему GCC, а не Intel C++ Compiler?

Вопрос №2 - почему у тебя подгружается какая-то локальная копия библиотеки, а не системная (та, что из пакета установлена)?

./libstdc++.so.6
./

Если вместе со скачанным бинарником идёт эта библиотека, которая, очевидно, более старой версии, чем у тебя в системе, ты можешь попробовать заменить её системной (32-битной, разумеется, если приложение x32, не перепутай).

tiandrey ★★★★★
()
Последнее исправление: tiandrey (всего исправлений: 2)
Ответ на: комментарий от tiandrey

Не предположим, а всё правильно сделал.

Я повторюсь, на GCC 4.X никаких проблем нет.

Хотя, на Fedora без проблем всё работает. А вот на ubuntu 16.04 - нет.

Ответ №1 - у меня ICC, но т.к. ICC базируется на GCC, то ошибки выше.

Ответ №2 - неизвестно, судя по информации в поисковых системах - я не один такой.

p.s. Эта, это какая? libstdc++.so.6?

Где располагаются системные библиотеки?

BitSum ★★
() автор топика
Ответ на: комментарий от BitSum

Где располагаются системные библиотеки?

/lib/ /lib32/ /usr/lib etc.

Deleted
()
Последнее исправление: nepank (всего исправлений: 1)
Ответ на: комментарий от BitSum

Где компиляешь, на чём запускаешь? Если на новой системе собирать, при попытке запуска на старой вот такое и будет вылезать.

anonymous
()
Ответ на: комментарий от anonymous

Нет. Да.

Такой ответ устраивает?

BitSum ★★
() автор топика
Ответ на: комментарий от anonymous

Где компиляешь, на чём запускаешь? Если на новой системе собирать, при попытке запуска на старой вот такое и будет вылезать.

<<

только на GCC 5.X. ps Ubuntu 16.04 <<

Это в первом посте.

Клиент и сервер на Ubuntu 16.04, принцип установки библиотек не отличается.

Аналогичная проблема у многих - если гуглить и решение у каждого своё, но я больше склонен к тому, что tiandrey прав и решение уже практикую:

Если вместе со скачанным бинарником идёт эта библиотека, которая, очевидно, более старой версии, чем у тебя в системе, ты можешь попробовать заменить её системной (32-битной, разумеется, если приложение x32, не перепутай).

BitSum ★★
() автор топика
Ответ на: комментарий от BitSum

тоесть если точки не будет, то в ядре что-то работать не будет?

teod0r ★★★★★
()
Ответ на: комментарий от anonymous

ICC базируется на GCC

да?

Не базируется, но использует, да.

tiandrey ★★★★★
()
Ответ на: комментарий от BitSum

p.s. Эта, это какая? libstdc++.so.6?

Да.

Где располагаются системные библиотеки?

/{,usr/,usr/local/}lib{,32,64}

tiandrey ★★★★★
()
Ответ на: комментарий от BitSum

Ты не то делаешь. apt-file ищет по всем пакетам (не установленным в том числе), а ты, наверное, всё же хочешь искать по тем пакетам, которые у тебя установлены. Это делается так:

$ dpkg -S libstdc++.so.6
libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6
// накрайняк и locate можно использовать, если название пакета не нужно

tiandrey ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.