LibstdС++: отсутствует DSO из командной строки
У меня возникла проблема с созданием файла make файла gtkmm. Я реализовал простое решение, однако, я получаю следующую ошибку:
g++ -Wall -std = С++ 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 ссылка на символ '__gxx_personality_v0 @@CXXABI_1.3'
/usr/lib/x86_64-linux-gnu/libstdС++. so.6: символы с добавлением ошибок: DSO отсутствует в командной строке
collect2: ошибка: ld возвращен 1 статус выхода
: рецепт для цели "main" не выполнен
make: *** [main] Ошибка 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 [email protected] $(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 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
}
Что я делаю неправильно?
Ответы
Ответ 1
Я столкнулся с той же проблемой при сборке библиотек openCV
$ gcc DisplayImage.cpp 'pkg-config opencv --libs --cflags' -o DisplayImage
/usr/bin/ld: /tmp/ccbyJ7Ms.o: undefined reference to symbol '[email protected]@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++
к вашей команде.
$ 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
Ответ 2
У меня была та же проблема, она была решена путем добавления -lstdС++ в командной строке.
Ответ 3
У меня была похожая проблема при компиляции zeromq (zmq) в мой проект. Добавление -lstdС++ к строке ссылки в моем make- файле решило проблему.