从 /usr/include/sys 符号链接到 /usr/include/x86_64-linux-gnu/sys 是否安全?

从 /usr/include/sys 符号链接到 /usr/include/x86_64-linux-gnu/sys 是否安全?

我丢失了/usr/include/sys目录及其所有标头。
我有 build-essentials 以及这个 make 所需的所有其他 -dev 包。

通过阅读周围的内容,我了解到符号链接到/usr/include/x86_64-linux-gnu/sysfrom内部的标头是安全的/usr/include/sys,因为目标处的标头是 64 位,但可以使用 32 位构建,除非需要特定的 32 位标头。

从某种程度上来说,这听起来很有道理,但我还是有疑问。

我读到的建议是符号链接到特定的标头,我想知道我是否可以符号链接到整个/usr/include/x86_64-linux-gnu/sys目录,因为我可能会丢失许多标头。

虽然这是一个一般性问题,但我将包括我遇到的具体问题:

我无法创建 fsthost。它说它缺少 sys/types.h。
环顾四周,我看到了安装 libc6-dev-i386 的建议,最终用另一个错误替换了一个丢失的标头错误。所以我删除了它,因为它是针对 AMD 的。

这是我尝试make GTK2=1为 fsthost 1.5.4执行操作时得到的结果

gcc -c  -m32 -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libxml2 -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/harfbuzz   -g -O2 -Wall -Wno-deprecated-declarations -Wno-multichar -frounding-math -fsignaling-nans -mfpmath=sse -msse2 -DNO_VUMETER -fno-pic -fno-PIC -I. -I/usr/include -I/usr/include -I/usr/include/wine -I/usr/include/wine/windows   -o gtk_32.o gtk.c
In file included from gtk.c:1:0:
jackvst.h:4:23: fatal error: sys/types.h: No such file or directory
 #include <sys/types.h>
                       ^
compilation terminated.
make: *** [gtk_32.o] Error 1

在 Mint 17 Xfce 上运行。

答案1

sys/types.h标头属于 glibc(如果您不使用 glibc,则属于替代 libc 实现)。要获取该标头,您应该从您的发行版中安装 glibc 的开发包。

在 Debian 7 上,这个包是libc6-dev.对于 ubuntu,它是libc6-dev-i386(32 位)或libc6-dev-amd64(64 位)。这些名称可能会起作用,具体取决于您的 mint 安装继承的发行版。

不要因为安装这个软件包而“最终用另一个错误改变了一个缺失的头错误”而犹豫不决。没关系,您缺少许多依赖项,并且在它们全部存在之前您的构建将无法完成。从评论中您还缺少libjack,libxml2和的库libgtk-x11-2.0。要解决每个问题,您需要找到-dev每个问题各自的包。如果您安装了 libc6-dev 软件包并且构建不再抱怨系统标头,那么这个问题就解决了,并且您的其他构建问题不直接相关。

答案2

只需对它们进行符号链接(假设您正在为自己的开发系统执行此操作)。 Ubuntu 开发者为了自己的利益而变得太聪明了。显然,如果您需要交叉编译,您将有另一座桥梁可以跨越。 “聪明地”,我的 Mint 17.1 系统同时具有 /usr/include/c++/usr/include/x86_64-linux-gnu/c++.更好的是,它们是不同的。这意味着你在外面必须小心。

cd /usr/include ; for f in x86_64-linux-gnu/*
do g=$(basename $f) ; test -f $g -o -d $g -o -L $g && continue
   ln -s $f $g ; done

相关内容