Я недавно установил gcc 4.9.2 и обнаружил проблему при линковке с libs.
Выход для поиска пути:
install: /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/
programs: =/usr/libexec/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/libexec/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/libexec/gcc/x86_64-unknown-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/
libraries: =/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/../lib64/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../lib64/:/lib/x86_64-unknown-linux-gnu/4.9.2/:/lib/x86_64-linux-gnu/:/lib/../lib64/:/usr/lib/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../:/lib/:/usr/lib/
Действительно, проблемная вещь заключается в следующем:
/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/
Мне нужно изменить порядок этих двух библиотек (чтобы у lib64 был более высокий приоритет поиска), потому что оба каталога имеют libstdc ++. So.6, и мне нужно использовать один из них в папке lib64.
Как мне это сделать?
Пожалуйста, не надо:
Во-первых, я предлагаю изменить LD_LIBRARY_PATH для явного включения libstdc ++. So.6, так как я уверен, что в папке x86_64-linux-gnu есть другие вещи, которые являются более старыми версиями в папке lib64 — я обновил g ++ со старой версии.
2, я предполагаю, что я явно включаю эту lib64 / libstdc ++. So.6 в опцию g ++ -L.
Большое спасибо.
/ ************************ РЕДАКТИРОВАТЬ ДЛЯ БОЛЬШЕ ИНФОРМАЦИИ ********************* *** /
По запросу ниже, вот еще некоторые подробности о конфигурации и установке (я скачал источник 4.9.2 с gcc.gnu.org, распаковал его и запустил в папке верхнего уровня 4.9.2):
mkdir ../gcc-build &&
cd ../gcc-build &&
../gcc-4.9.2/configure \
--prefix=/usr \
--libdir=/usr/lib \
--enable-shared \
--enable-threads=posix \
--enable-__cxa_atexit \
--disable-multilib \
--with-system-zlib \
--enable-languages=c,c++ &&
make
Вы можете иметь новый (или изменить существующий) GCC specs
файл, документация есть Вот.
AFAIK, то specs
файл находится в вашей директории «install», так что вы будете в
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/specs
(который вы могли бы создать, если он не существует).
AFAIK есть некоторые встроенные по умолчанию, но вы можете настроить вашу систему, чтобы иметь явный.
Читайте также о варианты отладки GCC. Вы можете использовать -dumpspecs
чтобы получить встроенную спецификацию по умолчанию.
Детали могут быть очень специфичными для вашей системы, особенно если вы скомпилировали НКУ из его исходного кода.
Я не достаточно знаком с specs
файлы, чтобы дать надежное решение для вашей конкретной проблемы. Вы можете спросить на [email protected]
для деталей.
NB: Я склонен полагать, что настройка gcc
с --prefix=/usr
(а не не системный префикс, как по умолчанию --prefix=/usr/local/
или несколько --prefix=/opt/
и т. д.) — это ошибка (или хотя бы используйте также --program-suffix=-4.9
). Вы, вероятно, перепутаете свои gcc
с системой gcc
; Если хотите замещать ваша система gcc
(что, вероятно, опасно) вы должны настроить свой новый gcc
с теми же аргументами, что и ваша система gcc
имел. Заметить, что /usr/bin/gcc -v
расскажет как была ваша система gcc
настроено (должно быть сделано перед перезаписью).
При компиляции недавнего GCC 4.9 на более старой системе я обычно рекомендую настроить его --prefix=/usr/local/
а также --program-suffix=-4.9
затем добавьте /usr/local/bin/
на ваш $PATH
и использовать make CC=gcc-4.9 CXX=g++-4.9
для создания программ с ним.