Мне нужно создать две сторонние разделяемые библиотеки, поэтому их .so файлы будут повторно использоваться другими проектами. Однако после сборки одна из этих библиотек содержит hardcoded путь к другому. Этот путь недействителен на других машинах и вызывает предупреждения компоновщика. Как я могу предотвратить полный путь от встраивания в результирующие файлы .so?
Подробнее:
Первый источник библиотеки: ~/dev/A
Второй источник библиотеки: ~/dev/B
Оба из них имеют configure
script для создания файлов make. Библиотека B
зависит от A
. Итак, сначала я построю A
:
$ ~/dev/A/configure --prefix=~/dev/A-install
$ make && make install
Затем я строю B
:
$ ~/dev/B/configure --prefix=~/dev/B-install --with-A=~/dev/A-install
$ make && make install
Затем я хочу загрузить содержимое ~/dev/A-install
и ~/dev/B-install
на наш файловый сервер, чтобы другие команды и машины сборки могли использовать двоичные файлы. Но они получают предупреждения компоновщика, когда они пытаются использовать B
:
/usr/bin/ld: warning: libA.so.2, needed by /.../deps/B/lib/libB.so, not found (try using -rpath or -rpath-link)
Когда я запускаю ldd libB.so
, он дает:
...
libA.so.2 => /home/alex/dev/A-install/lib/libA.so.2
Очевидно, что этот путь существует только на моей машине и не может быть найден на других машинах.
Как удалить полный путь с жестким кодом из libB.so
?
Спасибо.