Выполняется двоичный файл: `GLIBCXX_3.4.11' не найден

Я пытаюсь запустить предварительно скомпилированный код, но получаю следующую ошибку:

./bin/stipdet: /cm/shared/apps/gcc/4.3.4/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./bin/stipdet)

Я погуглил ошибку и увидел, что некоторые люди решили похожие проблемы, удалив libstdc++.so.6 и добавив новую динамическую ссылку, указывающую на usr/local/lib. Но у меня нет корневого доступа к системе, в которой я пытаюсь запустить это, поэтому я не могу добавлять/удалять файлы в этом каталоге.

Кто-нибудь знает другой способ решить эту проблему?

ОБНОВЛЕНИЕ:
Я попытался добавить каталог другой версии libstdc++.so.6 в LD_PRELOAD, но у меня это не сработало, он по-прежнему использует файл из неправильного каталога.

То же самое происходит, когда я добавляю правильный каталог к ​​LD_LIBRARY_PATH. Наконец, я также попытался удалить все остальное из LD_LIBRARY_PATH, а затем добавить правильный каталог (просто попробовать). Это, казалось, исправило исходную ошибку! Но теперь я получаю ту же ошибку в другом месте:

./bin/stipdet: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /var/scratch/user/local/lib/libopencv_features2d.so.2.2)

По-видимому, opencv использует другую версию glibcxx, поэтому переход на другую libstdc ломает opencv. Есть ли способ обойти эту проблему?


person Bart    schedule 08.06.2011    source источник


Ответы (4)


Если у вас установлена ​​правильная версия libstdc++.so.6 в другом месте (например, в вашем домашнем каталоге), вы можете либо установить LD_LIBRARY_PATH, либо использовать LD_PRELOAD, см. Что такое трюк LD_PRELOAD?

person Frank Schmitt    schedule 08.06.2011
comment
Спасибо. Я обновил свой вопрос с результатами вашего совета. Теперь он ломается в другом месте :( - person Bart; 09.06.2011

Было бы неплохо, если бы вы указали, какая у вас ОС. Если это Solaris, вы можете попробовать установить LD_NOVERSION, чтобы заставить компоновщик времени выполнения игнорировать версии общей библиотеки.

export LD_NOVERSION=1

person jlliagre    schedule 08.06.2011
comment
когда я набираю uname -a, он говорит Linux x86_64 x86_64 x86_64 GNU/Linux. И когда я вхожу в систему, он говорит На основе CentOS 5 - person Bart; 09.06.2011
comment
Боюсь, в Linux нет эквивалента LD_NOVERSION. - person jlliagre; 10.06.2011

FAQ по libstdc++ отвечает на ваш первоначальный вопрос: http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths

Для обновления этого не должно быть. Более новый libstdc++.so должен быть найден в вашем LD_LIBRARY_PATH со всеми символами старого. Возможно, /var/scratch/user/local/lib/libopencv_features2d.so.2.2 был связан с абсолютным путем, а не с SONAME libstdc++.so.6, вы можете проверить это, запустив:

ldd /var/scratch/user/local/lib/libopencv_features2d.so.2.2
person Jonathan Wakely    schedule 06.05.2014

Я скопировал файл A(/usr/lib64/libstdc++.so.6) в словарь B(/opt/MATLAB/MATLAB_Compiler_Runtime/v711/sys/os/glnxa64), и это сработало.

person 岳天相    schedule 13.03.2017