Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 99, средняя оценка - 4.83
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
#1

./massdown: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./massdown) - C++

25.02.2010, 10:39. Просмотров 12134. Ответов 13
Метки нет (Все метки)

всем хай!

собираю свою программу на новом железе х86_64
долго не получалось скомпилить. при линковке получал вот такое сообщение:
relocation R_X86_64_32 against `a local symbol'
я так понял, это из-за того что часть библиотек от которых зависит цель, были собраны как 32-ух битные.
но с этим вроде все нормально, пересобрал все либы - скомпилировалось.

теперь при запуске получаю такое сообщение:
./iptv-translator: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./iptv-translator)
./iptv-translator: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libboost_program_options.so.1.42.0)
./iptv-translator: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libboost_serialization.so.1.42.0)
./iptv-translator: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libboost_date_time.so.1.42.0)
./iptv-translator: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libboost_filesystem.so.1.42.0)
./iptv-translator: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libboost_system.so.1.42.0)
./iptv-translator: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libboost_thread.so.1.42.0)
./iptv-translator: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libffmpeg.so.1.0.0)
просветите, что не правильно сделал?

Добавлено через 3 минуты
упс, забыл.
по умолчанию в системе стоял gcc-4.3.2
я установил(собрал из исходников) gcc-4.4.3
может в этом дело?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2010, 10:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ./massdown: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./massdown) (C++):

Как в VS 2015 устранить ошибку LNK 1104 cannot open file 'fltkd.lib wsock32.lib comct132.lib fltkjpegd.lib'? - C++
как устранить ошибку LNK 1104 в visual studio community 2015? пункта C/C++ в properties нету Можете сказать куда его перенесли или...

Version `GLIBCXX_3.4.21' not found - C++ Linux
Возникает такая ошибка при динамической линковке библиотек:/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found...

GLIBCXX_3.4.21 not found - C++ Linux
Добрый день. На форуме находил уже схожую тему, но решение, предложенное там не помогла (предлагалась команда "sudo add-apt-repository...

Перезапись библиотек cp /usr/compat/linux/usr/lib/* /usr/lib - FreeBSD
Была выполнена команда из под sudo #sudo cp /usr/compat/linux/usr/lib/* /usr/lib то есть все похожие по названию библиотеки переписались ...

Ошибка /usr/lib/php5/sessionclean: «/usr/lib/php5/20131226/: cannot read file data: Is a directory» - Debian Linux
Как исправить? С сервера приходят письма

Ошибка при конфигурации SAMS Cannot find mysql's libmysqlclient in /usr/lib - Ubuntu Linux
Проблемы с уcтановкой SAMS Ошибка при конфигурации SAMS: Cannot find mysql's libmysqlclient in /usr/lib Все пакеты стоят: ...

13
Evg
Эксперт CАвтор FAQ
18238 / 6363 / 435
Регистрация: 30.03.2009
Сообщений: 17,578
Записей в блоге: 28
25.02.2010, 12:25 #2
Библиотека libstdc++ завязана на конкретную версию компилятора (ну и с учётом некоторых дальнейших совместимостей снизу вверх). Какие-то бинарники и динамические библиотеки требуют libstdc++ от gcc-3.4.* (потому как были собранны именно этой версией компилятора). Версия GLIBCXX_3.4.11 вроде бы должна означать компилятор 3.4.11, но, насколько знаю, в этой серии последним компилятором было gcc-3.4.6. Поэтому тебе нужно поставить поддержку c++ от компилятора gcc-3.4.6
1
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.02.2010, 12:32  [ТС] #3
Цитата Сообщение от Evg Посмотреть сообщение
Какие-то бинарники и динамические библиотеки требуют libstdc++ от gcc-3.4.*
а как узнать какие?
1
Evg
Эксперт CАвтор FAQ
18238 / 6363 / 435
Регистрация: 30.03.2009
Сообщений: 17,578
Записей в блоге: 28
25.02.2010, 12:34 #4
Хотя гоню... GLIBCXX_3.4.11 это скорее нумерация версии libstdc++, которая хз как правильно зависит от версии g++. Но пробелма в общем случае такая. При поставке gcc/g++ в комплект идёт набор динамических библиотек некоторой конкретной версии. Далее если этим компилятором собирать какую-то динамическую библиотеку, то эта библиотека будет настроена на конкретную версию библиотеки libstdc++. И в этом месте что-то не срослось. Часть библиотек у тебя собрана не той версией g++, которая у тебя установлена на машине. После того, как ты сам скомпилил более свежую версию - не факт, что она установилась в те места, что нужно

Создай тест hello_world на Си++ и скомпиляй его через твой собранный компилятор: g++-4.4.3 t.cc -Wl,-t
По выдаче можно будет понять, куда свалились динамические библиотеки

Добавлено через 39 секунд
Цитата Сообщение от niXman Посмотреть сообщение
а как узнать какие?
В первом посте ты показал выдачу - там в скобках написано required by

Добавлено через 1 минуту
Код
readelf --dynamic  /usr/local/lib/libboost_program_options.so.1.42.0 | grep NEEDED
Покажет версии требуемых библиотек (по сути с такими номерами должен называться требуемый файл *.so)
1
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.02.2010, 12:34  [ТС] #5
Цитата Сообщение от Evg Посмотреть сообщение
В первом посте ты показал выдачу - там в скобках написано required by
так буст собран этим же компилятором. я подумал что теперь буст зависит от каких-то библиотек.

Цитата Сообщение от Evg Посмотреть сообщение
Создай тест hello_world на Си++ и скомпиляй его через твой собранный компилятор: g++-4.4.3 t.cc -Wl,-t
По выдаче можно будет понять, куда свалились динамические библиотеки
сейчас.
0
Evg
Эксперт CАвтор FAQ
18238 / 6363 / 435
Регистрация: 30.03.2009
Сообщений: 17,578
Записей в блоге: 28
25.02.2010, 12:36 #6
Я там ещё в конец 4 поста дописал
1
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.02.2010, 13:09  [ТС] #7
вот :
server:~# readelf --dynamic /usr/local/lib/libboost_program_options.so.1.42.0 | grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [librt.so.1]
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
Добавлено через 47 секунд
Цитата Сообщение от Evg Посмотреть сообщение
Я там ещё в конец 4 поста дописал
ок.
сейчас по очереди все проделаю.

Добавлено через 25 минут
а вот что на локальной машине:
nixman@nixman ~ $ readelf --dynamic /usr/local/lib/libboost_program_options.so.1.42.0 | grep NEEDED
0x00000001 (NEEDED) Shared library: [librt.so.1]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libc.so.6]
то же самое. но все компилится и работает. компилятор той же версии.

Добавлено через 35 секунд
разница только в том что локальная машина 32-ух битная.

Добавлено через 5 минут
libstdc++.so.6 нашел несколько штук.
/usr/lib/libstdc++.so.6.0.10
/usr/local/lib32/libstdc++.so.6.0.13
/usr/local/lib64/libstdc++.so.6.0.13
0
Evg
Эксперт CАвтор FAQ
18238 / 6363 / 435
Регистрация: 30.03.2009
Сообщений: 17,578
Записей в блоге: 28
25.02.2010, 13:13 #8
Ты так и не показал выдачу для hello_world в запуске "g++-4.4.3 t.cc -Wl,-t". В этот запуск надо ещё добавить опцию (режим 32 или 64), с которой ты компиляешь свою первоначальную прогу. И проблема, видимо, в том, что по дефолту у тебя настроено на каталоги от старого компилятора.

Как вариант перед запуском massdown нужно установить "export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH" (ну или lib32, ибо я толком не понял, что у тебя)
1
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.02.2010, 13:27  [ТС] #9
Цитата Сообщение от Evg Посмотреть сообщение
Ты так и не показал выдачу для hello_world в запуске "g++-4.4.3 t.cc -Wl,-t"
-ltorrent-rasterbar (/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../libtorrent-rasterbar.so)
-lboost_program_options (/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../libboost_program_options.so)
-lcurl (/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../libcurl.so)
/lib/libpthread.so.0
-lstdc++ (/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../../lib64/libstdc++.so)
-lm (/usr/lib/libm.so)
-lgcc_s (/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../../lib64/libgcc_s.so)
/lib/libc.so.6
(/usr/lib/libc_nonshared.a)elf-init.oS
/lib/ld-linux-x86-64.so.2
-lgcc_s (/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../../lib64/libgcc_s.so)
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/crtend.o
/usr/lib/../lib64/crtn.o
и т.д.

Добавлено через 23 секунды
я ничего не понимаю

Добавлено через 5 минут
кстати в названии темы указал одну программу, а обсуждаем другую.
но думаю суть одна. т.к. ошибка одна и та же.
0
Evg
Эксперт CАвтор FAQ
18238 / 6363 / 435
Регистрация: 30.03.2009
Сообщений: 17,578
Записей в блоге: 28
25.02.2010, 13:40 #10
"-lstdc++ (/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../../lib64/libstdc++.so)" означает, что при линковке использовался файл "/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../../lib64/libstdc++.so", что после замены всех ".." превращется в "/usr/local/lib64/libstdc++.so". Т.е. при компиляции и линковке через твой ручками собранный g++ подцепляется именно этот файл. Однако выдача из самого первогопоста гвоорит о том, что в момент запуска у тебя цеплялся файл /usr/lib/libstdc++.so.6 - т.е. совсем не тот, который используется во время линковки твоим самодельным компилятором. Поэтому для запуска программы, собранной твоим компилятором надо устанавливать LD_LIBRARY_PATH как я указал в 8 посте

Для контроля всё-таки запусти в консоли "realpath /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../../lib64/libstdc++.so", а то мог и ошибиться при подсчёте.
1
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.02.2010, 13:50  [ТС] #11
server:~# realpath /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../../lib64/libstdc++.so
/usr/local/lib64/libstdc++.so.6.0.13
все правильно.

Цитата Сообщение от Evg Посмотреть сообщение
Поэтому для запуска программы, собранной твоим компилятором надо устанавливать LD_LIBRARY_PATH как я указал в 8 посте
т.е. перед тем как запускать программу нужно постоянно это выполнять?
а почему компилятор использует разные версии libstdc++.so ?
может что-то нужно настроить чтоб он только одну из них использовал?

зы
и откуда ты столько всего знаешь
0
Evg
Эксперт CАвтор FAQ
18238 / 6363 / 435
Регистрация: 30.03.2009
Сообщений: 17,578
Записей в блоге: 28
25.02.2010, 14:05 #12
Цитата Сообщение от niXman Посмотреть сообщение
т.е. перед тем как запускать программу нужно постоянно это выполнять?
Если ты сам перекомпиляешь прогу, то можно подать в gcc дополнительные опции "-Wl,-rpath=/usr/local/lib64 -Wl,-rpath-link=/usr/local/lib64" (внутри кавычек всего один пробел - на всякий случай, а то многих запятая смущает и ставят лишние пробелы)

Цитата Сообщение от niXman Посмотреть сообщение
а почему компилятор использует разные версии libstdc++.so ? может что-то нужно настроить чтоб он только одну из них использовал?
Каждая версия компилятора использует СВОЮ версию libstdc++ при линковке. На процесс запуска приложений (а точнее на настройки того, откуда именно подцепятся динамические библиотеки) компилятор не должен влиять и это должнонаходиться в руках админа. Если ты такой умный, что сам собираешь компилятор, то обязан правильно сделать дефолтные настройки для динамической загрузки программ. Я толком не знаю, как это делается, но скорее всего пути настроек прописываются в /etc/ld.so.conf. А самый простой вариант - это работать через переменную LD_LIBRARY_PATH. Ну а если ты запредельно умный и имеешь две версии gcc - то флаг тебе в руки и сам разбирайся с настройками. Примерно на такую логику ориентируются разработчики компилятора

Цитата Сообщение от niXman Посмотреть сообщение
и откуда ты столько всего знаешь
По работе приходится с gcc работать
1
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.02.2010, 14:18  [ТС] #13
Цитата Сообщение от Evg Посмотреть сообщение
Каждая версия компилятора использует СВОЮ версию libstdc++ при линковке. На процесс запуска приложений (а точнее на настройки того, откуда именно подцепятся динамические библиотеки) компилятор не должен влиять и это должнонаходиться в руках админа. Если ты такой умный, что сам собираешь компилятор, то обязан правильно сделать дефолтные настройки для динамической загрузки программ. Я толком не знаю, как это делается, но скорее всего пути настроек прописываются в /etc/ld.so.conf. А самый простой вариант - это работать через переменную LD_LIBRARY_PATH. Ну а если ты запредельно умный и имеешь две версии gcc - то флаг тебе в руки и сам разбирайся с настройками. Примерно на такую логику ориентируются разработчики компилятора
понятно.
проще тогда прописать LD_LIBRARY_PATH в .bashrc

все, спасибо тебе приогромное!
вопрос закрыт.
0
Evg
Эксперт CАвтор FAQ
18238 / 6363 / 435
Регистрация: 30.03.2009
Сообщений: 17,578
Записей в блоге: 28
25.02.2010, 14:25 #14
Цитата Сообщение от niXman Посмотреть сообщение
проще тогда прописать LD_LIBRARY_PATH в .bashrc
Тогда есть шанс, что программы, скомпиленные на "старой" версии будут цеплять "новую" библиотеку. Хотя это может быть и не страшно, т.к. разработчики поддерживают совместимость
1
25.02.2010, 14:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2010, 14:25
Привет! Вот еще темы с ответами:

Что значит sh: /usr/mqm.sh not found - Bash
Добрый вечер помогите мне разобраться с проблемой, запускаю скрипт на HP UX в ответ он пишет sh: /usr/mqm.sh not found ...

Array required, but String found - Java SE
Почему не работает? В c++ можно было так делать( import java.util.Scanner; public class First { public static void main(String...

Python version 3.4.3 not found in registry matplotlib - Python
Добрый вечер. При установке пакета matplotlib появляется ошибка, прикрепленная ниже. (На тот случай, если не отобразилось, то:Python...

[Fatal Error] Required package 'lmdweb30_d7' not found - Delphi
Программа работает нормально но только с Ехе файла а в делфи она не за пускается и выдает вот такую вот ошибку Required package...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru