Почему компоновщик устанавливает стандартный путь по умолчанию в ELF в качестве стандартного местоположения библиотеки при создании кода C ++ с определенной версией GCC 4.8.0? - PullRequest
0 голосов
/ 15 июня 2019

Я создаю свой main.cpp с опцией компоновщика -Wl, -rpath, чтобы установить дополнительный rpath для исполняемого файла для поиска символов во время загрузки. Проблема в том, что компоновщик gcc 4.8.0 уже помещает rpath по умолчанию в ELF в свою папку lib на этапе компоновки. Rpath по умолчанию, размещаемый компоновщиком, переопределяет заданный в командной строке компоновщик. Как мне подавить / переопределить этот rpath по умолчанию, добавленный компоновщиком. Примечание: я не вижу этой проблемы с GCC версии 4.8.3 и позже. К сожалению, я не должен обновлять GCC из-за различных других зависимостей.

Я уже попробовал опцию компоновщика --enable-new-dtags, которая влияет на игнорирование rpath и имеет первый приоритет LD_LIBRARY_PATH, за которым следует RUN_PATH. Теперь, поскольку этот исполняемый файл тесно связан с несколькими настроенными библиотеками, представленными в разных местах и ​​используемыми широким кругом аудитории, я не хочу оставлять этот первый приоритет в переменной среды LD_LIBRARY_PATH, которая в конечном итоге будет установлена ​​конечным пользователем этот исполняемый файл. Есть ли другая опция, чтобы игнорировать этот путь по умолчанию, добавленный компоновщиком, и отдавать приоритет rpath, предоставленному как опции компоновщика?

Строка сборки: pkgs / gcc / 4.8.0 / bin / g ++ main.cpp -Wl, -Bdynamic pkgs / gcc / 6.3.0 / lib64 / libstdc ++. So.6 -Wl, -rpath, 'pkgs / gcc /6.3.0/lib64/

readelf -d a.out | grep RPATH
0x000000000000000f (RPATH) Библиотека rpath: [/pkgs/gcc/4.8.0/lib64:/pkgs/gcc/6.3.0/lib64/]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...