Я создаю свой 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/]