![Gentoo如何编译静态链接的LVM?](https://linux22.com/image/33609/Gentoo%E5%A6%82%E4%BD%95%E7%BC%96%E8%AF%91%E9%9D%99%E6%80%81%E9%93%BE%E6%8E%A5%E7%9A%84LVM%EF%BC%9F.png)
仍处于 livecd 阶段的 Gentoo 安装(目前无法启动)无法静态出现 LVM。我需要一个静态编译的 lvm 才能在我的 initrd 中使用它。
我的make.conf:
CFLAGS="-O2 -march=native -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
USE="bindist mmx sse sse2 static"
出现编译错误:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../lib64/libudev.a(time-util.o): In function `now': (.text.now+0x8): undefined reference to `clock_gettime'
我还注意到:
- 警告,我们不再用以下内容覆盖 /sbin/lvm 和 /sbin/dmsetup
- 他们的静态版本。如果您需要静态二进制文件,
- 您必须将 .static 附加到文件名!
这是什么意思?我该如何将这个“.static”附加到文件名中?
我看到这个人也有同样的问题,但没有答案:http://archives.gentoo.org/gentoo-user/msg_eb40f5d76161fda72d134551cc26d989.xml
我还注意到这个线程:http://forums.gentoo.org/viewtopic-p-4892618.html?sid=e41b07d9b8554c10430619e1f51d564a
我尝试导出LDFLAGS =“-lrt”
然而它似乎没有改变任何东西,仍然是同样的错误。
答案1
对我来说工作得很好(在~amd64
Gentoo 中),但是尝试从udev
lvm2 中删除 useflag 作为解决方法,因为 udev 在 initramfs 阶段并不重要。调用静态二进制文件/sbin/lvm.static
(需要static
构建 useflag)。您可以使用 检查二进制文件是否是静态的ldd
。
echo sys-fs/lvm2 static -udev >> /etc/portage/package.use
还要检查您是否static-libs
启用了 useflag,以获取您希望静态构建的包的依赖项。通常 ebuild 应该为您检查这些依赖关系,但最好仔细检查。