我正在将一些应用程序从 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