Я с трудом пытаюсь скомпилировать вещи только с зависимостями в исходных системных папках. Однако существуют разные версии библиотек и инструментов, установленных в / usr / local.
G ++ всегда включает файлы из / usr / local / include, но связывает их с библиотеками в / usr / lib, что вызывает большой беспорядок.
Мое быстрое решение - просто сказать Linux (Ubuntu) не заглядывать в / usr / local и полагаться только на то, что находится за его пределами: в местах, где пакеты установлены по умолчанию.
Печальная история заключается в том, что я не могу просто удалить то, что находится в / usr / local, потому что некоторые приложения используют там библиотеки.
Как это можно сделать?
при компиляции вы установили переменную среды:
LD_LIBRARY_PATH=/usr/lib
(или где угодно)
а также проверьте, если /etc/ld.so.conf
и / или /etc/ld.so.conf.d/
нет путей, которые вам не нужны.
Рассмотрите возможность использования chroot или контейнера для создания программного обеспечения в чистой среде с известными зависимостями. Сообщества разработчиков пакетов Debian и Red Hat считают это лучшей практикой. Для Debian предпочтительным инструментом является pbuilder. Он предназначен для генерации дебетов, что удобно, потому что вы можете установить их с помощью apt.
Хотя вы можете полностью игнорировать / usr / local / при изменении сборки, дьявол кроется в деталях. Скрипты сборки сильно различаются: от загадочных автоинструментов до специально написанных файлов Makefile. За время, необходимое для понимания этого и исправления любого / usr / local /, у вас может быть система chroot, генерирующая воспроизводимые сборки.