使用 /usr/include 中的其他标头链接到 musl

Sam*_*uel 7 c standard-library include-path musl

我正在尝试使用 x11 编译程序并使用 musl 作为 c 库。我的系统上仍然有 glibc。Musl 位于/usr/local/musl/includeThe glib headers are still in/usr/include

当我与

musl-gcc test.c
Run Code Online (Sandbox Code Playgroud)

我明白了fatal error: X11/Xlib.h: no such file or directory

如果我尝试

musl-gcc test.c -I/usr/include
Run Code Online (Sandbox Code Playgroud)

它包含 glib 标头而不是 musl 标头,并引发一堆错误。

如果我尝试

musl-gcc test.c -I/usr/local/musl/include -I/usr/include
Run Code Online (Sandbox Code Playgroud)

它仍然包含 /usr/include 中 glib 的标头

如何使 musl-gcc 使用 musl 标头,但仍包含 /usr/include 中的其他文件?

小智 0

感谢@technosaurus 的评论。您应该添加符号链接。

例如,我linux/userfaultfd.h在编译时需要使用 linux 头文件musl-gcc。只需创建符号链接以包含文件夹(在我的例子中/usr/include/linux)并将它们放入 musl 的默认标头路径中:

pushd /usr/local/musl/include
sudo cp -rs /usr/include/linux/ linux/ # now can #include<linux/...>
Run Code Online (Sandbox Code Playgroud)

请注意,这很可能还不够,因为包含的标头也可能使用#include <another-path/...>. 您会在编译器错误中注意到它。符号链接所有这些another-path,你就完成了。

就我而言,我还需要符号链接这些路径:

sudo cp -rs /usr/include/asm/ asm/ # now can #include<asm/...>
sudo cp -rs /usr/include/asm-generic/ asm-generic/ # now can #include<asm-generic/...>
Run Code Online (Sandbox Code Playgroud)