24

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

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

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

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

collect2: error: ld returned 1 exit status

: recipe for target 'main' failed

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:

#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:

#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
}

What am I doing wrong?

9
  • 5
    how about linking against libstdc++ by adding -L/usr/lib64 -lstdc++? Commented Oct 21, 2015 at 15:37
  • Linker error, have you tried to compile manually ? Try to specify libstdc++.so.6 at the end of the command. Commented Oct 21, 2015 at 15:41
  • 13
    Link with g++ not gcc. Do not manually add libstdc++ to the command line. Just link with g++. Commented Oct 21, 2015 at 17:06
  • @n.m. Am I not using g++ in the makefile? Commented Oct 21, 2015 at 23:57
  • 3
    Apparently you attempt to use g++ but there's a misspelling in the rule (PROG vs PROGRAM). Commented Oct 22, 2015 at 4:12

4 Answers 4

36

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

[SOLVE]

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

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

For g++ it will link libstdc.so.6++ automatically

$ g++ DisplayImage.cpp `pkg-config opencv --libs --cflags` -o DisplayImage
Sign up to request clarification or add additional context in comments.

Comments

9

I had same problem it was solved by addiing -lstdc++ in command line.

Comments

8

I had the same issue, in my case the problem was writing gcc instead of g++

1 Comment

For me it was clang++ instead of clang. Similar.
0

I had a similar problem when compiling zeromq (zmq) into my project. Adding -lstdc++ to the link line in my makefile solved the problem.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.