使用libdevmapper编译/链接应用程序

时间:2011-12-13 01:22:04

标签: dynamic-linking device-mapper

我实际上是在LVM源代码目录中进行make和make install,因此我可以使用-ldevmapper编译和链接我的应用程序。

我想知道这是否是使用libdevmapper构建/链接应用程序的唯一方法(正确方法)?

2 个答案:

答案 0 :(得分:2)

您可以使用它来构建libdevmapper并在您自己的项目中使用它。

make device-mapper

lvm2 / libdm / libdevmapper.so中的libdevmapper.so就是你想要的。
您仍然需要使用./configure来生成lvm2 makefile
这是我的libdevmapper相关项目中的Makefile。我将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 .

答案 1 :(得分:0)

首选方法似乎是使用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阻止层没有完成使用这些,例如直接在umount系统调用完成后。)