2011-12-06 57 views
0

我想在我的gtkmm/glade/C++上使用一些opencv类。包括任何opencv代码后,它工作得很好,但如果我像这样添加opencv到库:LIBS ='pkg-config ... opencv --libs'应用程序停止工作。在主的第一行(GNOME :: GDA ::的init();)崩溃分段故障Makefile和库错误的依赖关系?

的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

链接时放置库的位置会有很大差异。

如果你有一个图书馆libexample,使用:

g++ -lexample myprog2.o 

会失败,如果myprog2被引用他们加载库函数。

而是使用:

g++ myprog2.o -lexample 

也就是说,添加$(LIBS)参考后目标文件。

+0

也就是说,将'build:'后的行改为'$(LD)$(OBJS)$(LIBS)-o cish' –

+0

同意,但是在链接阶段出现错误会给出错误,对吧? – eriktous

+0

我做了你所说的,我移动$(LIBS)$(OBJS)后仍然抛出一个分段错误:( – wisuzu