2011-12-06 17 views
0

gtkmm/glade/C++でいくつかのopencvクラスを使いたいです。任意のopencvコードを含めるとうまくいきますが、opencvをlibsに次のように追加すると、LIBS = 'pkg-config ... opencv --libs'アプリケーションが動作しなくなります。メインの最初の行で(Gnomeの:: GDA ::のinit();)それがセグメンテーションフォールトでクラッシュメイクファイルとライブラリの依存関係が悪いですか?

Makefileの

LD = g++ 
LIBS = `pkg-config gtkmm-2.4 glibmm-2.4 libgdamm-4.0 --libs` 
CPPFLAGS = `pkg-config gtkmm-2.4 glibmm-2.4 libgdamm-4.0 --cflags` 

OBJS = main.o TreeviewImages.o MainWindow.o FormDialog.o DBUtil.o 

all: build 

build: $(OBJS) 
    $(LD) $(LIBS) $(OBJS) -o cish 

main.o: main.cpp 
    g++ $(CPPFLAGS) -c main.cpp 

MainWindow.o: MainWindow.cpp MainWindow.h DBUtil.h FormDialog.h 
    g++ $(CPPFLAGS) -c MainWindow.cpp 

TreeviewImages.o: TreeviewImages.cpp TreeviewImages.h 
    g++ $(CPPFLAGS) -c TreeviewImages.cpp 

FormDialog.o: FormDialog.cpp FormDialog.h DBUtil.h 
    g++ $(CPPFLAGS) -c FormDialog.cpp 

DBUtil.o: DBUtil.cpp DBUtil.h 
    g++ $(CPPFLAGS) -c DBUtil.cpp 

clean: 
    rm -f cish $(OBJS) 

はどれリード/ヒント/ヘルプは理解されるであろう!

+4

私は、 'make'がエラーなく終了し、実行時にクラッシュする結果の実行可能ファイルであることを正しく理解していますか?次に、私がエラーを探す最初の場所はmakefileではなく、C++ソースコードです。 – eriktous

答えて

2

リンクするときにライブラリを置くのは大きな違いがあります。

g++ -lexample myprog2.o 

myprog2がそれらを参照している場合は、ライブラリ関数をロードするために失敗します:使用して

あなたはライブラリlibexampleを持っている場合は、。

は、代わりに使用しますと言うことです

g++ myprog2.o -lexample 

は、ファイルをオブジェクトへの参照後$(LIBS)を追加します。

+0

つまり、ビルド後の行を '$(LD)$(OBJS)$(LIBS)-o cish'のように変更します。 –

+0

合意しましたが、間違っているとリンクフェーズでエラーが発生します。 – eriktous

+0

私はあなたが言ったことをしました、$(OBJS)の後に$(LIBS)を移動させ、まだセグメンテーションの欠陥を投げます: – wisuzu

関連する問題