【问题标题】:Compiling/linking applications using libdevmapper使用 libdevmapper 编译/链接应用程序
【发布时间】:2012-01-18 23:22:22
【问题描述】:

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

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

【问题讨论】:

    标签: dynamic-linking device-mapper


    【解决方案1】:

    您可以使用它来构建 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 .
    

    【讨论】:

      【解决方案2】:

      首选方法似乎是使用 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 系统调用完成后。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-23
        • 1970-01-01
        • 2019-03-23
        • 1970-01-01
        • 2018-03-11
        • 1970-01-01
        • 2021-09-10
        相关资源
        最近更新 更多