Компиляция / компоновка приложений с использованием 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 не был закончен с использованием например, сразу после завершения системного вызова.)