libstdc++:命令行中缺少 DSO

Posted

技术标签:

【中文标题】libstdc++:命令行中缺少 DSO【英文标题】:libstdc++: DSO missing from command line 【发布时间】:2016-01-20 16:26:17 【问题描述】:

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

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: 对符号'__gxx_personality_v0@@CXXABI_1.3'的未定义引用

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

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

:目标“主要”的配方失败

make: *** [main] 错误 1

生成文件:

# 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

我做错了什么?

【问题讨论】:

如何通过添加-L/usr/lib64 -lstdc++ 链接到libstdc++ 链接器错误,你试过手动编译吗?尝试在命令末尾指定 libstdc++.so.6。 链接 g++ 而不是 gcc。不要手动将 libstdc++ 添加到命令行。只需与 g++ 链接。 @n.m.我不是在makefile中使用g++吗? 显然您尝试使用 g++,但规则中有拼写错误(PROG 与 PROGRAM)。 【参考方案1】:

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

$ 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++ 添加到您的命令中。

$ 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】:

我遇到了同样的问题,通过在命令行中添加 -lstdc++ 解决了。

【讨论】:

【参考方案3】:

我有同样的问题,在我的情况下,问题是写 gcc 而不是 g++

【讨论】:

对我来说是 clang++ 而不是 clang。类似。【参考方案4】:

在将 zeromq (zmq) 编译到我的项目中时,我遇到了类似的问题。将 -lstdc++ 添加到我的 makefile 中的链接行解决了这个问题。

【讨论】:

以上是关于libstdc++:命令行中缺少 DSO的主要内容,如果未能解决你的问题,请参考以下文章

在命令行中使用 WbExport 时缺少数据和 sql 脚本文件

Xcode缺少libstdc++的解决方案

Xcode缺少libstdc++的解决方案

libstdc++.so.6缺少这个文件怎么搞

GLEW + cmake 链接失败“未定义对符号 glDrawElements 的引用”+“命令行中缺少 DSO”

iOS开发 Xcode10报错缺少libstdc++.6.0.9.tbd