9

コンパイルされたプログラムを後で別のマシンに配置する目的で、最新バージョンのubuntuでCプログラムをコンパイルしようとしています。ただし、gcc prog.c -o prog でコンパイルすると、「致命的なエラー: asm/page.h: そのようなファイルまたはディレクトリはありません」というエラーが表示されます。ヘッダーは次のとおりです。

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <limits.h>
#include <signal.h>
#include <unistd.h>
#include <sys/uio.h>
#include <sys/mman.h>
#include <asm/page.h>
#include <asm/unistd.h>

#include でエラーが発生します。致命的なエラーが表示されます: asm/page.h: そのようなファイルまたはディレクトリはありません。私が言ったように、私はそれをコンパイルしようとしています。欠落しているヘッダーなどを取得する方法はありますか? ありがとう。

4

3 に答える 3

5

通常、asm/page.hLinux カーネル ツリーにのみ存在し、通常は の下arch/<archname>/asm/page.hにあり、カーネル コード (またはカーネル モジュール) でのみ使用する必要があります。

stdio.hstdlib.h一方、 と はカーネル コードでは使用されません。したがって、元のソース コードはせいぜい怪しいものに見えます。ほとんどの場合asm/page.h、そもそもそれは必要ありませんでした。実際には、次のようなものが必要なだけですlinux/types.h(これは、カーネルの の 1 つに含まれるヘッダーの 1 つですasm/page.h)。

于 2013-10-11T05:15:33.283 に答える
5

これらのヘッダー ファイルは欠落していませんが、移動されています。ubuntu パッケージャーは物事を移動し、以前は「/usr/include/asm」にあったヘッダー ファイルの場所は「/usr/include/asm-generic」になりました。

修正するには、リンクを追加するだけです:

sudo ln -s /usr/include/asm-generic /usr/include/asm

...または、ビルドに不可欠な要素が不足している可能性があります。これは linux でコードをコンパイルするために必要です。ビルド必須のインストール

sudo apt-get install build-essential

適切なリンクを再作成します。

sudo ln -s /usr/include/asm-generic /usr/include/asm

Build-essential は /usr/include/asm-generic フォルダーをインストールする必要があります。そのようなフォルダーがない場合は、build-essentials を再インストールし、フォルダーが存在することを確認します。

/usr/include/asm-generic フォルダーは存在しますか?

build-essentials によってインストールされますが、それを調べると、それをインストールするのは依存関係です。

/usr/include/asm-generic が存在しない場合は、linux-libc-dev をインストールまたは再インストールしてみてください。

これにより、asm-generic フォルダーが作成されます。その場合は、その古いリンクを削除し、asm を asm-generic に再リンクします。

于 2013-10-11T06:09:22.407 に答える