Ubuntu Precise 系统头文件已移至其他地方,无法找到 sys/ucontext.h

Ubuntu Precise 系统头文件已移至其他地方,无法找到 sys/ucontext.h

我正在将一些应用程序从 Maverick 10.10 移植到 Precise 12.04。一些系统头文件似乎不在同一个位置。这让我很头疼,因为我添加包含路径似乎并不重要。

具体来说,在 Maverick 上,有一个文件在/usr/include/sys/ucontext.h,这个文件定义了常量REG_EIP。现在,在 Precise 上,这个文件已经移到/usr/include/x86_64-linux-gnu/sys/ucontext.h,但 g++ 4.6 和 4.7 都没有该包含路径:

`gcc -print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.6
 /usr/include/c++/4.6/x86_64-linux-gnu
 /usr/include/c++/4.6/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.6/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
 /usr/include
End of search list.

这样做的结果是,当包括时#include <ucontext.h>REG_EIP没有定义

我已尝试添加#include <sys/ucontext.h>但仍然出现错误:

error: 'REG_EIP' was not declared in this scope

知道如何修复这个问题吗?

答案1

您可以创建一个符号链接在终端上使用它:

$ sudo ln -s /usr/include/x86_64-linux-gnu/sys/ucontext.h /usr/include/sys/ucontext.h

如果/usr/include/sys/ucontext.h已经存在,您可能希望先重命名它:

$ sudo mv /usr/include/sys/ucontext.h /usr/include/sys/ucontext.h.backup

如果出现任何问题,您可以删除符号链接并恢复备份:

$ sudo rm /usr/include/sys/ucontext.h
$ sudo mv /usr/include/sys.ucontext.h.backup /usr/include/sys/ucontext.h

相关内容