У меня есть простая программа hello_world.cpp. Я скомпилировал его с помощью g ++ 4.4.7 в системе CentOS 6.6. Когда я смотрю на ldd a.out
:Почему настройка LD_LIBRARY_PATH изменяет зависимости разделяемой библиотеки?
linux-vdso.so.1 => (0x00007fffbd79e000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002ab6f6819000)
libm.so.6 => /lib64/libm.so.6 (0x00002ab6f6b1f000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002ab6f6da4000)
libc.so.6 => /lib64/libc.so.6 (0x00002ab6f6fba000)
/lib64/ld-linux-x86-64.so.2 (0x00002ab6f65f7000)
Когда я загружаю модуль для GCC-4.9.2, LD_LIBRARY_PATH
установлен в /path/to/gcc-4.9.2/lib64
и работает ldd a.out
выходы:
linux-vdso.so.1 => (0x00007ffff9393000)
libstdc++.so.6 => /path/to/gcc-4.9.2/lib64/libstdc++.so.6 (0x00002b2b7c104000)
libm.so.6 => /lib64/libm.so.6 (0x00002b2b7c435000)
libgcc_s.so.1 => /path/to/gcc-4.9.2/lib64/libgcc_s.so.1 (0x00002b2b7c6b9000)
libc.so.6 => /lib64/libc.so.6 (0x00002b2b7c8cf000)
/lib64/ld-linux-x86-64.so.2 (0x00002b2b7bee2000)
ВОПРОС: Почему 4.9.2 версия gcc-библиотек, используемых при установке LD_LIBRARY_PATH, хотя я скомпилирован с 4.4.7?
Это, похоже, создает проблему с пониманием того, какая версия библиотеки используется. Пользователь может скомпилировать программу с одной версией компилятора, загрузить разные версии компилятора (через модуль), а затем запустить исполняемый файл, который использует другую версию библиотеки, чем ожидалось.
«Когда я загружаю модуль для gcc-4.9.2, LD_LIBRARY_PATH установлен в ...« Что вы имеете в виду? Кто это устанавливает? –
он установлен в файле модуля, то есть: preend-path LD_LIBRARY_PATH /path/to/gcc-4.9.2/lib64 –