Я выяснил, что для загрузки библиотек сначала открывается исполняемый файл /lib/ld-linux-x86-64.so.2
, Все функции загрузки общих библиотек (поиск по многим путям, использование rpath и т. Д.) Будут работать только после ld-linux
загружен, потому что это ld-linux
который реализует эти функции.
Мне показалось, что ld-linux.so
местоположение жестко закодировано в исполняемом файле (вызывая strings
мой исполняемый файл подкрепляет эту теорию). Моя проблема в том, что в моем дистрибутиве Linux, компилятор (g ++) устанавливает ld-linux
место для /lib/ld-linux-x86-64.so.2
, В то время как на Ubuntu (который является более популярным) он расположен на /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
,
Мне было интересно, могу ли я сделать мой исполняемый файл ищет ld-linux.so
в /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
(который также присутствует в моем дистрибутиве как символическая ссылка).
Попробуйте добавить -Wl,--dynamic-linker=/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
на ваш LDFLAGS
,
Других решений пока нет …