Изменить путь к библиотеке g ++

Я недавно установил 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

0

Решение

Вы можете иметь новый (или изменить существующий) 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 для создания программ с ним.

1

Другие решения


По вопросам рекламы [email protected]