我实际上是在 LVM 源代码目录中进行 make 和 make 安装,因此我可以使用 -ldevmapper 编译和链接我的应用程序。
我想知道这是否是使用 libdevmapper 构建/链接应用程序的唯一方法(正确方法)?
我实际上是在 LVM 源代码目录中进行 make 和 make 安装,因此我可以使用 -ldevmapper 编译和链接我的应用程序。
我想知道这是否是使用 libdevmapper 构建/链接应用程序的唯一方法(正确方法)?
您可以使用它来构建 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 .
首选方法似乎是使用 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 系统调用完成之后。)