0

プログラムをコンパイルしようとしています。しかし、インクルードパスが正しくないため、機能しないと思います。

ELDKのpower-linux-gccを使用しています。

ファイルの構造は次のようになります

linux-kernel ----- driver----graphic_test----- Makefile
               |                          |
               |                          | -- main.c
               |
                --  include--linux --- jiffies.h
                                    |
                                      -- semaphore.h   

これは私がsemLib.cファイルにそれらを含める方法です

#include <jiffies.h>
#include <semaphore.h> 

私も試しました

#include <linux/jiffies.h>
#include <linux/semaphore.h>     

問題がインクルードであるかどうかはよくわかりませんが、私は思います。

それが私のMakefileです:

CC=powerpc-linux-gcc

LIBS = ../../kernel/time/jiffies.o ../../kernel/semaphore.o #libdrmko.o libdrm.o libs3gko.o

INC =   -I../../include

C_SRC = main.c lstLib.c  systLib.c semLib.c    #taskLib.c

C_OBJ = main.o lstLib.o systLib.o semLib.o    # taskLib.o

graphics_test: $(LIBS) $(C_OBJ)
    $(CC) -o graphics_test $(LIBS) $(C_OBJ) $(INC)

それはからのメッセージですmake

:~/Linux_Development_Workspace/linux-kernel/drivers/graphic_test$ make
powerpc-linux-gcc    -c -o ../../kernel/semaphore.o ../../kernel/semaphore.c
../../kernel/semaphore.c:28:28: error: linux/compiler.h: No such file or directory
../../kernel/semaphore.c:30:26: error: linux/module.h: No such file or directory
../../kernel/semaphore.c:32:29: error: linux/semaphore.h: No such file or directory
../../kernel/semaphore.c:33:28: error: linux/spinlock.h: No such file or directory
../../kernel/semaphore.c:34:26: error: linux/ftrace.h: No such file or directory
../../kernel/semaphore.c:36: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
../../kernel/semaphore.c:37: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
../../kernel/semaphore.c:38: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
../../kernel/semaphore.c:39: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
../../kernel/semaphore.c:40: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
../../kernel/semaphore.c:53: warning: 'struct semaphore' declared inside parameter list
../../kernel/semaphore.c:53: warning: its scope is only this definition or declaration, which is probably not what you want
../../kernel/semaphore.c: In function 'down':
../../kernel/semaphore.c:57: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:58: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:59: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:62: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c: At top level:
../../kernel/semaphore.c:64: warning: data definition has no type or storage class
../../kernel/semaphore.c:64: warning: parameter names (without types) in function declaration
../../kernel/semaphore.c:75: warning: 'struct semaphore' declared inside parameter list
../../kernel/semaphore.c: In function 'down_interruptible':
../../kernel/semaphore.c:80: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:81: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:82: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:85: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c: At top level:
../../kernel/semaphore.c:89: warning: data definition has no type or storage class
../../kernel/semaphore.c:89: warning: parameter names (without types) in function declaration
../../kernel/semaphore.c:101: warning: 'struct semaphore' declared inside parameter list
../../kernel/semaphore.c: In function 'down_killable':
../../kernel/semaphore.c:106: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:107: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:108: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:111: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c: At top level:
../../kernel/semaphore.c:115: warning: data definition has no type or storage class
../../kernel/semaphore.c:115: warning: parameter names (without types) in function declaration
../../kernel/semaphore.c:130: warning: 'struct semaphore' declared inside parameter list
../../kernel/semaphore.c: In function 'down_trylock':
../../kernel/semaphore.c:135: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:136: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:138: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:139: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c: At top level:
../../kernel/semaphore.c:143: warning: data definition has no type or storage class
../../kernel/semaphore.c:143: warning: parameter names (without types) in function declaration
../../kernel/semaphore.c:155: warning: 'struct semaphore' declared inside parameter list
../../kernel/semaphore.c: In function 'down_timeout':
../../kernel/semaphore.c:160: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:161: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:162: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:165: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c: At top level:
../../kernel/semaphore.c:169: warning: data definition has no type or storage class
../../kernel/semaphore.c:169: warning: parameter names (without types) in function declaration
../../kernel/semaphore.c:178: warning: 'struct semaphore' declared inside parameter list
../../kernel/semaphore.c: In function 'up':
../../kernel/semaphore.c:182: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:183: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:184: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c:187: error: dereferencing pointer to incomplete type
../../kernel/semaphore.c: At top level:
../../kernel/semaphore.c:189: warning: data definition has no type or storage class
../../kernel/semaphore.c:189: warning: parameter names (without types) in function declaration
../../kernel/semaphore.c:194: error: field 'list' has incomplete type
../../kernel/semaphore.c:204: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__down_common'
../../kernel/semaphore.c:236: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
../../kernel/semaphore.c:241: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
../../kernel/semaphore.c:246: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
../../kernel/semaphore.c:251: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
../../kernel/semaphore.c:256: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
make: *** [../../kernel/semaphore.o] Fehler 1
4

2 に答える 2

1

次のいずれかを追加する必要があります。

-I../../include/linux

コマンドラインに追加するか、次のように記述する必要があります。

#include <linux/jiffies.h>

ファイルへのアクセスを取得します。を使用して他のコードをチェックしてjiffies.h、標準的なスタイルを確認してください。


もう 1 つの問題は、個々のファイルのコンパイルで-Iオプションが取得されないことです。

powerpc-linux-gcc    -c -o ../../kernel/semaphore.o ../../kernel/semaphore.c

C ファイルをコンパイルするための組み込み規則がどのようなものかを知る必要があります。${INC}最終的に、値をに取得する必要があります${CFLAGS}。自明ですが、これは次のようになります。

CFLAGS = ${INC}

より一般的には (少なくとも私の経験では)、CFLAGS は多数のマクロから構築されます。OTOH、それはあなたにとって問題になるようには見えません。

于 2012-09-18T14:42:16.200 に答える
0

ジョナサンは重要な点を説明しています。(多かれ少なかれ) 問題は、コンパイラが semaphore.o をコンパイル/ビルドし、そのためにデフォルトのインクルード パスを使用しようとすることです。だから私は自分のメイクファイルを編集しました。問題を解決したものを以下に示します。

CC=powerpc-linux-gcc

LIBS =  ../../kernel/semaphore.o  #libdrmko.o libdrm.o libs3gko.o #../../kernel/time/jiffies.o

INC  =  -I/home/linuxdev/Linux_Development_Workspace/linux-kernel/include/ 
INC +=  -I/home/linuxdev/Linux_Development_Workspace/linux-kernel/
INC +=  -I/home/linuxdev/Linux_Development_Workspace/linux-kernel/include/linux

KDIR =  /home/linuxdev/Linux_Development_Workspace/linux-kernel/

C_SRC = main.c lstLib.c  systLib.c semLib.c    #taskLib.c

C_OBJ = main.o lstLib.o systLib.o semLib.o    # taskLib.o

graphics_test: $(LIBS) $(C_OBJ)
    echo Halloq
    $(CC)  -o --sysroot=$(KDIR)  graphics_test   $(LIBS) $(C_OBJ)  #$(INC)

semaphore: semaphore.o
    $(CC)  -o --sysroot=$(KDIR) semaphore ../../kernel/semaphore.o

semaphore.o: 
    @echo pwd:  $(shell pwd)
    $(CC)  -c  $(INC) ../../kernel/semaphore.c

ジョナサンが説明した方法もうまくいくと思いますが、試しませんでした!

私を助けようとしたすべての人に感謝します

于 2012-09-19T08:21:02.570 に答える