Makefile 和库的依赖关系不好?

发布于 2024-12-19 15:09:10 字数 948 浏览 2 评论 0原文

我想在我的 gtkmm/glade/c++ 上使用一些 opencv 类。包含任何 opencv 代码后,它工作得很好,但如果我将 opencv 添加到这样的库中: 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)

崩溃任何线索/提示/帮助将不胜感激!

I want to use some opencv classes on my gtkmm/glade/c++ . After including any opencv code it work just fine, but if I add the opencv to libs like this: LIBS = 'pkg-config ... opencv --libs' the application stop working. In the first line of the main ( Gnome::Gda::init(); ) it crashes with a Segmentation Fault

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)

Any lead/hint/help will be appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心清如水 2024-12-26 15:09:10

链接时将库放在哪里有很大的不同。

如果您有一个库 libexample,则如果 myprog2 正在引用库函数,则使用:

 g++ -lexample myprog2.o

将无法加载库函数。

而是使用:

g++ myprog2.o -lexample 

也就是说,在对目标文件的引用后面添加$(LIBS)

It makes a big difference where put your libraries when linking.

If you have a library libexample, using:

 g++ -lexample myprog2.o

will fail to to load the library functions if myprog2 is referencing them.

Instead use:

g++ myprog2.o -lexample 

That is to say, add the $(LIBS) after the reference to object files.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文