Как создать общую библиотеку (.so) без жестко запрограммированных полных путей зависимостей?

Мне нужно создать две сторонние разделяемые библиотеки, поэтому их файлы .so будут повторно использоваться другими проектами. Однако после сборки одна из этих библиотек содержит жестко заданный путь к другой. Этот путь недействителен на других машинах и вызывает предупреждения компоновщика. Как я могу предотвратить встраивание полного пути в итоговые файлы .so?

Подробности:

Первый источник библиотеки: ~ / dev / A
Второй источник библиотеки: ~ / dev / B

У них обоих есть сценарий configure для создания файлов 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 ?

Спасибо.

17
задан Alex Blekhman 27 October 2011 в 04:41
поделиться