Ответ 1
Если у вас есть правильная версия libstdС++. so.6 установлен в другом месте (например, в вашем домашнем каталоге), вы можете установить LD_LIBRARY_PATH или использовать LD_PRELOAD, см. Что такое трюк LD_PRELOAD?
Я пытаюсь запустить некоторый предварительно скомпилированный код, но я получаю следующую ошибку:
./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
. Есть ли способ решить эту проблему?
Если у вас есть правильная версия libstdС++. so.6 установлен в другом месте (например, в вашем домашнем каталоге), вы можете установить LD_LIBRARY_PATH или использовать LD_PRELOAD, см. Что такое трюк LD_PRELOAD?
Это поможет, если вы сообщите, какую ОС вы используете. Если это Solaris, вы можете попробовать установить LD_NOVERSION, чтобы сообщить компоновщику времени выполнения игнорировать версии разделяемой библиотеки.
export LD_NOVERSION=1
Часто задаваемые вопросы о 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
Я скопировал файл A (/usr/lib64/libstdС++. so.6) в словарь B (/opt/MATLAB/MATLAB_Compiler_Runtime/v711/sys/os/glnxa64), и он сработал.