Компиляция / компоновка приложений с использованием libdevmapper

На самом деле я делаю make и make install в каталоге с исходным кодом LVM, чтобы я мог скомпилировать и связать свое приложение, используя -ldevmapper.

Мне интересно, если это единственный способ (правильный способ) для создания / ссылки приложений с помощью libdevmapper?

2 ответа

Вы можете использовать это, чтобы просто собрать libdevmapper и использовать его в своем собственном проекте.

make device-mapper

А libdevmapper.so в lvm2/libdm/libdevmapper.so - это то, что вам нужно.
Вам все еще нужно использовать./configure для генерации make-файла lvm2
Вот мой Makefile в моем проекте, связанном с libdevmapper. Я поместил источник lvm2 в подкаталог непосредственно под моим каталогом проекта.

main: libdevmapper.so libdevmapper.h 
    gcc -ldevmapper main.c -o main
libdevmapper.so:
    cd ./lvm2&&./configure
    make -C ./lvm2 device-mapper
    cp ./lvm2/libdm/libdevmapper.so .
libdevmapper.h:
    cp lvm2/libdm/libdevmapper.h .

Предполагается, что предпочтительным методом является использование pkg-config, так как я нахожу devmapper.pc в моей системе. (Иногда случается, что в исходных проектах нет файла.pc, а дистрибутивы добавляют его, как, например, в случае openssl IIRC, поэтому наличие devmapper.pc файл в дистрибутиве, который я использую, может ничего не значить.)

От твоего configure.ac, вы бы призвали, как, например,

PKG_CHECK_MODULES([libdevmapper], [devmapper >= 1.02.48])

и положить это использовать в Makefile.am:

AM_CPPFLAGS = ${libdevmapper_CFLAGS}
bin_PROGRAMS = foo
foo_LDADD = ${libdevmapper_LIBS}

(Я выбрал>=1.02.48 здесь, потому что это была одна версия, в которой "-EBUSY проблемы", казалось, были исправлены; проблема, казалось, заключалась в том, что попытка отсоединить устройства dm иногда возвращала -EBUSY, потому что блочный уровень linux не был закончен с использованием например, сразу после завершения системного вызова.)

Другие вопросы по тегам