0

Linux で C++ のプログラミングを学んでいますが、次の問題があります。

main.cpp、model.cpp、view.cpp、controller.cpp の 4 つのファイルがあり、それぞれ (main を除く) に独自のヘッダー ファイルがあります。main.cpp には、model.h、view.h、および controller.h が含まれ、view.h には、それにのみ関連するその他のライブラリが含まれます (グラフィック ライブラリを実行するために必要です)。これらのライブラリは別のフォルダーにあり、独自に他の依存関係があります (そのため、それらを移動したくありません)。したがって、私のメイクファイルは次のようになります。

model: model.cpp model.h
  g++ -c model.cpp

view: view.cpp view.h
  g++ -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I.. -c view.cpp

controller: controller.cpp
  g++ -c controller.cpp

main: main.cpp
  g++ -c main.cpp

また、すべてのファイルをリンクする行もあります (これは Mac で作成し、Raspberry Pi の画面からコピーしているため、追加しませんでした)。

私の問題は、それらをコンパイルしようとすると、メインを除いてすべてが機能し、次のように表示されることです。

In file included from main.cpp:6:0:
view.h:4:23: fatal error: VG/openvg.h: No such file or directory
compilation terminated.
make: *** [main] Error 1

私が理解していることから、「ビューを作成」でビューをコンパイルすると、それが見なければならないパスがあるため、問題なく含まれているファイルを見つけることができますが、「メインを作成する」にはそれらのパスがないため、 openvg.h を探す場所がわかりません。問題は、パスをメインに追加すると、ライブラリの内部に複数の定義があることがわかります...助けはありますか?

4

3 に答える 3

0

助けてくれてありがとう!私はここ数日間、これと格闘してきました (これは、自動コンパイル/リンクに慣れるために得たものです)。それはその例に基づいています。各オブジェクトを単独で作成し、次のようにすべてリンクすると、実行できます。

test: model.o view.o controller.o main.o $(OPENVGLIBDIR)/libshapes.o $(OPENVGLIBDIR)/oglinit.o
    g++ -o test view.o main.o model.o controller.o $(OPENVGLIBDIR)/libshapes.o $(OPENVGLIBDIR)oglinit.o -L/opt/vc/lib -L/opt/vc/include -lGLES -ljpeg

view: view.cpp
    g++ -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I.. -c view.cpp

main: main.cpp
    g++ -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I.. -c main.cpp view.cpp

model: model.cpp
    g++ -c model.cpp

controller: controller.cpp
    g++ -c controller.cpp

「ビューを作成」「メインを作成」してから「テストを作成」するとすべてうまくいきますが、その前にオブジェクトを作成せずに「テストを作成」しようとすると、致命的なエラーが発生します: VG/openvg.h: No such fileまたはview.cppをコンパイルしようとしているときのディレクトリ

于 2013-07-24T22:33:28.387 に答える