1

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

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

4

2 回答 2

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 .
于 2012-12-14T03:16:47.513 回答
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 系统调用完成之后。)

于 2011-12-13T01:55:07.160 回答