libstdc++.so.6: error adding symbols: DSO missing from command line(Qt+ros)

undefined reference to symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc@@GLIBCXX_3.4.21'


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


qt配置好ros环境后编译一个简单的ros例子,但是编译出现以上错误。(catkin_make 编译没问题)


在cmakelist.txt里 set(CMAKE_CXX_COMPILER g++) 更不行。


qt --> Tools -> options -> build & run -> compilers 里 选中GCC (x86 64bit in /usr/bin) ,把compiler path 由/usr/bin/gcc改为/usr/bin/g++ ,重新加载编译即可正常编译。

<think>好的,我需要解决用户遇到的GCC编译错误:libstdc++.so.6: error adding symbols: DSO missing from command line。首先,我得回忆一下这个错误的常见原因。根据引用[3]和[4],这个问题通常发生在使用gcc命令编译C++代码时,没有正确链接C++标准库。因为gcc默认不会自动链接stdc++库,而g++会。 用户可能用的是gcc来编译C++文件,导致链接器找不到必要的库。所以第一个解决方法是改用g++命令,或者显式地添加-lstdc++参数。比如,用户原来的命令是gcc -o main main.cpp,应该改为g++ -o main main.cpp,或者在gcc命令后面加上-lstdc++,如gcc -o main main.cpp -lstdc++。 另外,引用[2]中提到需要指定库路径的情况,比如使用-L选项。但大多数时候,系统默认的路径已经包含libstdc++.so.6,所以可能不需要特别指定。不过如果用户的库不在默认路径下,可能需要加上-L参数。例如,如果库在/lib/gcc/x86_64-linux-gnu下,可以写成gcc -L/lib/gcc/x86_64-linux-gnu -lstdc++ -o main main.cpp。不过这种情况比较少见,通常只需要添加-lstdc++即可。 还要检查是否安装了正确版本的libstdc++,有时候库文件损坏或版本不兼容也会导致问题。用户可以通过更新系统或者重新安装g++来修复。例如在Ubuntu上可以运行sudo apt install --reinstall g++。 最后,如果用户的项目使用Makefile或其他构建系统,需要确保编译命令正确调用了g++或者在链接阶段包含了-lstdc++。例如在Makefile中将CC=gcc改为CC=g++,或者在CFLAGS中添加-lstdc++。 总结起来,解决方案分步骤:1)改用g++;2)显式链接stdc++库;3)检查库路径和安装情况;4)调整构建系统配置。同时需要提醒用户注意命令的正确使用,避免混合使用gcc和C++代码时不加必要的参数。</think>### 分步解决方案 **问题描述**: 在使用`gcc`编译C++代码时出现链接器错误: ``` /usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line ``` **原因分析**: 此错误通常是由于`gcc`在编译C++代码时未正确链接C++标准库(`libstdc++.so`)导致的。`gcc`默认不会自动链接C++标准库,而`g++`会[^3][^4]。 --- ### 解决方案 #### 方法1:改用`g++`命令编译 `g++`会自动处理C++标准库的链接。 ```bash g++ -o main main.cpp ``` #### 方法2:显式添加`-lstdc++`参数 如果必须使用`gcc`,需手动链接C++标准库: ```bash gcc -o main main.cpp -lstdc++ ``` #### 方法3:指定库路径(可选) 若库文件路径未包含在默认搜索路径中,需通过`-L`指定路径(参考[^2]): ```bash gcc -L/usr/lib/x86_64-linux-gnu -o main main.cpp -lstdc++ ``` #### 方法4:检查库文件完整性 1. 确保已安装`libstdc++`: ```bash sudo apt install libstdc++6 # Ubuntu/Debian ``` 2. 重新安装`g++`以修复潜在问题: ```bash sudo apt install --reinstall g++ ``` #### 方法5:调整构建系统配置 如果使用`Makefile`,需确保链接阶段包含`-lstdc++`: ```makefile CC = gcc CFLAGS = -lstdc++ # 添加链接参数 main: main.cpp $(CC) -o $@ $^ $(CFLAGS) ``` --- ### 相关问题 1. 如何区分`gcc`和`g++`的适用场景? 2. 如何解决其他常见的C++链接错误(如`undefined reference`)? 3. 动态库(DSO)和静态库在编译时的区别是什么? [^1]:libstdc++.so.6: error adding symbols: DSO missing from command line(Qt+ros) :解决办法:`gcc -L/lib/gcc/x86_64-linux-gnu -lstdc++` [^3]:`gcc`编译C++代码时需显式链接`libstdc++` :C++编译时DSO问题的常见解决方法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值