Выполнение двоичного файла: `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. Но у меня нет корневого доступа к системе, в которой я пытаюсь запустить это, поэтому я не могу добавлять/удалять файлы в этом каталоге.

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

UPDATE:
Я попытался добавить каталог другой версии 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. Есть ли способ решить эту проблему?

Ответ 1

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

Ответ 2

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

export LD_NOVERSION=1

Ответ 3

Часто задаваемые вопросы о libstdС++ отвечают на ваш оригинальный вопрос: http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths

Для обновления этого не должно быть. Более новый libstdc++.so thaqt должен быть найден в вашем 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

Ответ 4

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