Использование libtool для компоновки с библиотеками, отличными от libtool

У меня есть проект, настроенный с помощью autotools для создания библиотеки C ++, включая привязки Python с Boost.Python. У меня есть двоичный файл Boost.Python в моей системе, с которым я хочу связать:

/usr/lib/libboost_python-py27.so.1.49.0

Нет соответствующего файла .la, поэтому я подумал, что могу добавить полный путь к библиотеке в команду libtool, подобную этой:

bash ./libtool --mode=link g++ -rpath /usr/local/lib src/o1.lo src/o2.lo ... \
     /usr/lib/libboost_python-py27.so.1.49.0 -o libNSM.la

Но libtool отклоняет /usr/lib/libboost_python-py27.so.1.49.0 из выданной команды g ++. Если я запускаю g ++ вручную, он работает нормально.

Как я могу заставить libtool использовать собственную общую библиотеку или что было бы правильным способом справиться с такой ситуацией. Я определенно хочу, чтобы пользователи могли использовать свои существующие бинарные файлы Boost.


person bennihepp    schedule 21.12.2013    source источник


Ответы (1)


У меня есть двоичный файл Boost.Python в моей системе, с которым я хочу связать

Вы установили boost-devel, чтобы установить символическую ссылку на /usr/lib/libboost_python-py27.so.1.49.0?

Нет соответствующего файла .la

libtool связывать не обязательно. Если установлен boost-devel пакет, вероятно, будет достаточно -lboost_python-py27.

Как я могу заставить libtool использовать родную разделяемую библиотеку или что было бы правильным способом справиться с такой ситуацией. Я определенно хочу, чтобы пользователи могли использовать свои существующие бинарные файлы Boost.

Вы можете посмотреть макрос AX_BOOST_PYTHON из GNU Autoconf Archive, чтобы помочь пользователю настроить нужную библиотеку для libboost_python (вам может потребоваться больше чем только этот конкретный макрос оттуда). Макрос boost.m4, похоже, также поддерживает python и должен обеспечивать нечто подобное.

person ldav1s    schedule 23.12.2013
comment
Я использую AX_BOOST_PYTHON, и он дает мне путь к библиотеке повышения (в моем случае это просто / usr / lib). Но это не проблема наддува, это общая проблема. Допустим, я использую в своем проекте непопулярную библиотеку, а у пользователей моего программного обеспечения есть только общая библиотека (не libtool, а только файл .so). Как они могут собрать проект, если libtool не принимает библиотеки, отличные от libtool? Как правильно это сделать? - person bennihepp; 24.12.2013
comment
Похоже, что нет возможности связать библиотеку с нестандартным именем файла с помощью libtool. Библиотека должна иметь расширение файла .so или .la. - person bennihepp; 24.12.2013
comment
Пакет разработки Boost (например, boost-dev или libboost-python1.49-dev) должен предоставлять символическую ссылку (с расширением .so) на общую библиотеку. - person ldav1s; 24.12.2013
comment
Опять же, libtool не требует .la файла для связывания. Если .so файл является общей библиотекой на платформе, libtool свяжет его с обычными параметрами компоновщика -L, -l. - person ldav1s; 24.12.2013
comment
Да, ты прав. libtool нужен файл .la или .so. Но дать ему файл с другим окончанием не получится (даже если это может быть общая библиотека и g ++ может с этим справиться). Спасибо! - person bennihepp; 24.12.2013