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.cppcc 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?
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
I had same problem it was solved by addiing -lstdc++ in command line.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With