Компиляция / компоновка приложений с использованием libdevmapper - PullRequest
1 голос
/ 13 декабря 2011

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

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

Ответы [ 2 ]

2 голосов
/ 14 декабря 2012

Вы можете использовать это, чтобы просто собрать 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 .
0 голосов
/ 13 декабря 2011

Предполагается, что предпочтительным способом является использование 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 не был закончен с их использованием, напримернепосредственно после завершения системного вызова.)

...