Qt中报错 collect2:ld returned 1 exit status

今天在编写Qt程序时,报错 collect2:ld returned 1 exit status

 

网上基本说是大概分为以下三种情况:

 

1、编译成功的例子在后台执行,有时一闪而过,如果再次build ,则会提示上述错误。

解决方法:打开任务管理器,找到相应的exe进程,关闭即可;  或者直接关闭QtCreator。

2、没有编译成功的情况下,最常见情况是程序本身需要include的头文件被遗漏了

解决方法:细心查找基类所用的头文件,include之后即可。

3、.h文件中相关的槽函数在cpp文件中没有定义

解决方法:查找遗漏的槽函数,根据需要,具体的定义。(碰到过一回,很关键)

4、.h文件中声明了全局变量,.cpp文件的函数里面使用了该全局变量

解决方法:.cpp文件外面没有初始化全局变量,初始化即可
 

尝试后,均未解决,最后发现是链接错误(其实这个报错最大可能也是链接错误,而不是编译错误

 

发现错误,动手解决,错误原因是未在CmakeList文件中添加后来加上的源文件,导致链接时失败

 

 

set(project_SOURCES main.cpp imu.cpp imu_block.cpp pcap_reader.cpp)

 

 

在红线部分,加上对应的cpp文件名即可!

 

 

----------------------------------------------------------分割线---------------------------------------------------------

2019.10.29补充

再次出现这个错误vcollect2:ld returned 1 exit statusv

这次的原因是槽函数(slot)在头文件中声明了,忘了在cpp中定义

 

在使用 Qt 进行开发时,如果遇到 `collect2: error: ld returned 1 exit status` 的错误,通常意味着链接器无法正确解析某些符号或库依赖项。这种问题可能由多种原因引起,包括但不限于缺少必要的库、编译器选项配置不正确、或者依赖的第三方库版本不兼容。 以下是一些常见的解决办法: ### 1. 检查链接器命令行参数 确保所有需要的库都通过 `-l` 参数正确传递给链接器。例如,如果程序依赖 OpenSSL 库,则应添加 `-lssl -lcrypto`;如果使用了实时功能(如 `clock_gettime`),则需要添加 `-lrt`[^2]。此外,对于某些特定模块,比如数据库支持,也需要显式链接对应的库(如 `-lsqlite3` 或 `-lmysqlclient`)。 ### 2. 验证库路径和文件存在性 确认所引用的所有库文件确实存在于系统中,并且链接器能够找到它们。可以使用 `-L` 参数指定额外的库搜索路径,例如 `-L/usr/local/lib`。同时检查 `/usr/bin/ld` 是否报告了 DSO(动态共享对象)缺失的问题,这通常表示某个依赖库未被正确链接或其路径未设置。 ### 3. 调整编译配置 在运行 `./configure` 脚本时,确保启用了所需的功能并禁用了不必要的模块以减少冲突的可能性。例如,在构建嵌入式 Qt 应用程序时,可以通过配置脚本来启用特定的特性(如 `-openssl`)或禁用其他特性(如 `-no-alsa`)。一个典型的配置命令示例如下所示: ```bash ./configure -prefix /home/shell.albert/oristar/build \ -release \ -opensource \ -confirm-license \ -no-c++11 \ -shared \ -process \ -largefile \ -accessibility \ -qt-sql-sqlite \ -qt-sql-mysql \ -plugin-sql-sqlite \ -plugin-sql-mysql \ -no-qml-debug \ -no-sse2 \ -no-sse3 \ -no-ssse3 \ -no-sse4.1 \ -no-sse4.2 \ -no-avx \ -no-avx2 \ -no-mips_dsp \ -no-mips_dspr2 \ -no-pkg-config \ -qt-zlib \ -mtdev \ -no-journald \ -qt-libpng \ -qt-libjpeg \ -qt-freetype \ -no-harfbuzz \ -openssl \ -qt-pcre \ -qt-xcb \ -xkb-config-root \ -qt-xkbcommon \ -xinput2 \ -xcb-xlib \ -glib \ -no-pulseaudio \ -no-alsa \ -no-gtkstyle \ -make libs \ -make tools \ -nomake examples \ -verbose \ -no-nis \ -no-cups \ -iconv \ -evdev \ -icu \ -fontcofig \ -strip \ -no-pch \ -dbus \ -xcb \ -no-eglfs \ -directfb \ -linuxfb \ -no-kms \ -qpa xcb \ -xplatform linux-arm-gnueabi-g++ \ -qreal float \ -no-opengl ``` ### 4. 更新或重新安装相关软件包 有时,旧版或损坏的库可能导致链接失败。尝试更新系统上的相关软件包到最新版本,或者完全卸载后重新安装它们。 ### 5. 清理项目并重新构建 执行 `make clean` 来清除之前生成的文件,然后再次运行 `make` 命令进行构建。这样可以帮助排除由于部分编译残留而导致的问题。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潇湘夜雨~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值