Você não pode #include
dois cabeçalhos com um caminho idêntico, mas você pode instalar um fora dos caminhos normais e substituí-los quando você compilar usando a opção apropriada (para gcc, -I
). Eu acho que você já entendeu essas coisas, então não é preciso pensar muito para reconhecer que se você colocar mais de um asm/fcntl.h
nos diretórios de inclusão normais, apenas um deles será aplicado de qualquer maneira . / p>
Eu não acho que você tenha muito o que se preocupar, no entanto. Começando com alguns dos seus comentários:
Those features in the userspace program that use newer kernel mechanisms can be disabled.
Isso é bom. Se você precisar de #define NEWVALUE 666
para compilar , e isso envolver um recurso que funcionará apenas em um kernel mais novo e você pode pegar ou desabilitar o uso de tal coisa, então as seções que realmente aplicam NEWVALUE
nunca será chamado. Lembre-se, não é que não exista nenhum cabeçalho definindo esta disponível quando o kernel antigo está rodando - mesmo que houvesse, não importaria, já que o problema real em tempo de execução é que você efetivamente invocou uma parte inexistente do kernel. kernel ABI . Você não precisa de nenhum cabeçalho presente apenas para executar um executável, então voltar para o kernel antigo não importará para isso.
Perhaps I'm being paranoid but...
Sim e não. Se este é um sistema onde várias pessoas arbitrariamente trocam em cabeçalhos de kernel diferentes para explorar novos recursos ao compilar coisas que serão deixadas por perto e rodar depois usando um kernel antigo, a paranóia é uma resposta apropriada, lol. No entanto, provavelmente não há muito que realmente se enquadre nessa categoria.
As distribuições substituem os cabeçalhos do kernel em cada atualização, mas a lista de coisas que os usuários precisam substituir ao mesmo tempo geralmente não parece tão longa (se é que existe). Acho que é em parte porque manter compatibilidade retroativa nesse contexto é bem fácil, mas acho que também é porque as coisas nesse contexto não mudam drasticamente com o tempo.
I suppose I could save off the old headers and reinstall them.
Você poderia fazer isso, ou você poderia substituí-los da fonte apropriada quando necessário ( make headers_install
); se é um kernel distro e você está preocupado que eles possam ser corrigidos, a distro deve ter um pacote fonte para isso.