libstdc ++:命令行缺少DSO [英] libstdc++: DSO missing from command line

查看:141
本文介绍了libstdc ++:命令行缺少DSO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在实现 gtkmm 应用程序的 makefile 时遇到问题.我已经实现了一个简单的解决方案,但是,出现以下错误:

I am having trouble implementing a gtkmm application's makefile. I have implemented a simple solution, however, I am getting the following error:

g ++ -Wall -std = c ++ 11 pkg-config gtkmm-3.0 --cflags -c main.cpp

g++ -Wall -std=c++11 pkg-config gtkmm-3.0 --cflags -c main.cpp

cc main.o pkg-config gtkmm-3.0 --libs -o main

cc main.o pkg-config gtkmm-3.0 --libs -o main

/usr/bin/ld:main.o:对符号'__gxx_personality_v0 @@ CXXABI_1.3'的未定义引用

/usr/bin/ld: main.o: undefined reference to symbol '__gxx_personality_v0@@CXXABI_1.3'

/usr/lib/x86_64-linux-gnu/libstdc ++.so.6:添加符号时出错:命令行缺少DSO

/usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line

collect2:错误:ld返回1个退出状态

collect2: error: ld returned 1 exit status

:目标主要"的配方失败

: recipe for target 'main' failed

make:*** [main]错误1

make: *** [main] Error 1

Makefile:

# Compiler
CXX = g++
CXXFLAGS = -Wall -std=c++11 `pkg-config gtkmm-3.0 --cflags`

# gtkmm library flags
LDLIBS = `pkg-config gtkmm-3.0 --libs`

PROGRAM = main
SRCS = $(wildcard *.cpp)
OBJS = $(SRCS:.cpp=.o)
DEPEND = .depend

.PHONY: clean

$(PROG): $(OBJS)
    $(CXX) $^ -o $@ $(LDLIBS)

# Object file rules:
.cpp.o:
    $(CXX) $(CXXFLAGS) -c $<

# Dependencies
.depend:
    rm -f ./.depend
    $(CXX) $(CXXFLAGS) -MM $(SRCS) > $(DEPEND)

all: .depend $(PROGRAM)

clean:
    rm -f $(OBJS)
    rm -f $(PROGRAM)
    rm -f $(DEPEND)

-include $(DEPEND)

main.cpp:

#include <gtkmm/application.h>

#include "MainWindow.hpp"

int main(int argc, char *argv[]) {
  Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");

  MainWindow window;

  // Show windows and return when closed
  return app->run(window);
}

MainWindow.hpp:

MainWindow.hpp:

#ifndef GUI_MAIN_WINDOW_H
#define GUI_MAIN_WINDOW_H

#include <gtkmm.h>

class MainWindow: public Gtk::Window {

  public:
    MainWindow();
    virtual ~MainWindow();

  protected:
    Gtk::Frame frame;

};

#endif // GUI_MAIN_WINDOW_H

MainWindow.cpp:

MainWindow.cpp:

#include "MainWindow.hpp"

MainWindow::MainWindow() {
  // Set window properties
  set_title("Main window");
  set_size_request(300, 300);

  // Set window border width
  set_border_width(10);

  // Add frame
  add(frame);

  // Set frame's label
  frame.set_label("Frame");

  // Align the label at the right of the frame
  frame.set_label_align(Gtk::ALIGN_END, Gtk::ALIGN_START);

  // Set the style of the frame
  frame.set_shadow_type(Gtk::SHADOW_ETCHED_OUT);

  show_all_children();
}

MainWindow::~MainWindow() {
  // Nothing to do here
}

我在做什么错了?

推荐答案

在构建openCV库时遇到了相同的问题

I met the same issue when built openCV libraries

$ gcc DisplayImage.cpp `pkg-config opencv --libs --cflags` -o DisplayImage
/usr/bin/ld: /tmp/ccbyJ7Ms.o: undefined reference to symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21'
//usr/lib/i386-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

[解决]

对于 gcc ,请尝试在命令中添加 -lstdc ++ .

For gcc try adding -lstdc++ to your command.

$ gcc DisplayImage.cpp `pkg-config opencv --libs --cflags` -o DisplayImage -lstdc++

对于 g ++ ,它将自动链接 libstdc.so.6 ++

$ g++ DisplayImage.cpp `pkg-config opencv --libs --cflags` -o DisplayImage

这篇关于libstdc ++:命令行缺少DSO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆