Ubuntu Os cabeçalhos de sistema precisos são movidos para outro local e sys / ucontext.h não pode ser encontrado

2

Estou no processo de portar alguns aplicativos do Maverick 10.10 para o Precise 12.04. Alguns dos cabeçalhos do sistema não parecem estar no mesmo lugar. Isso está me dando algumas dores de cabeça, já que não parece importar que eu adicione os caminhos de inclusão.

Em particular, no Maverick, havia um arquivo em /usr/include/sys/ucontext.h , e esse arquivo define a constante REG_EIP . Agora, no Precise, esse arquivo foi movido para /usr/include/x86_64-linux-gnu/sys/ucontext.h , mas g ++ 4.6 e 4.7 possuem o caminho include:

'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.

a conseqüência disso é que, ao incluir #include <ucontext.h> , REG_EIP não está definido

Eu tentei adicionar #include <sys/ucontext.h> , mas ainda recebo o erro:

error: 'REG_EIP' was not declared in this scope

Alguma ideia de como corrigir isso?

    
por lurscher 20.12.2012 / 18:17

1 resposta

1

Você pode criar um link simbólico usando isso em um terminal:

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

Se /usr/include/sys/ucontext.h já existisse, talvez você queira renomeá-lo antes:

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

Se algo der errado, você poderá remover o link simbólico e restaurar o backup:

$ sudo rm /usr/include/sys/ucontext.h
$ sudo mv /usr/include/sys.ucontext.h.backup /usr/include/sys/ucontext.h
    
por Addison Montgomery 20.12.2012 / 20:59