Как исправить ошибку ld returned 1 exit status в Qt 6.10.0 static сборке
Решение ошибки линковки collect2.exe в Qt 6.10.0 static сборке. Пошаговые инструкции по исправлению путей библиотек и настройке .pro файла.
Как исправить ошибку “collect2.exe: error: ld returned 1 exit status” в Qt 6.10.0 static сборке?
Я начинаю изучать Qt и столкнулся с проблемой при создании проекта на qmake. В Qt 6.10.0 static сборке появляются две ошибки, в то время как в Qt 6.9.2 shared и Qt 5.5.17 static сборках такой проблемы не возникает. В чём может быть причина?
Файл QT Proj.pro:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
You can make your code fail to compile if it uses deprecated APIs.
In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES +=
main.cpp
mainwindow.cpp
HEADERS +=
mainwindow.h
FORMS +=
mainwindow.ui
Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
Файл mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
Файл main.cpp:
#include “mainwindow.h”
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Файл mainwindow.cpp:
#include “mainwindow.h”
#include “ui_mainwindow.h”
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow))
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
Ошибка “collect2.exe: error: ld returned 1 exit status” является распространенной проблемой при сборке проектов Qt и указывает на сбой в процессе компоновки (линковки). Эта ошибка возникает, когда линкер не может найти необходимые библиотеки или столкнулся с другими проблемами при создании исполняемого файла.
Содержание
Основные причины ошибки
Ошибка collect2.exe: error: ld returned 1 exit status в Qt 6.10.0 static сборке может возникать по нескольким причинам:
- Неправильная настройка статической линковки - при static сборке Qt 6.10.0 могут потребоваться дополнительные флаги конфигурации
- Проблемы с путями библиотек - линкер не может найти необходимые .lib файлы
- Отсутствие необходимых модулей Qt - особенно в новой версии 6.10.0
- Несоответствие debug/release версий - попытка смешать разные типы библиотек
- Проблемы с правами доступа - как упоминалось в Stack Overflow
- Проблемы с путями, содержащими пробелы - особенно актуально для Windows, как указано в Qt Forum
Способы исправления ошибки
Проверка статической сборки
Для static сборки Qt 6.10.0 убедитесь, что ваш .pro файл правильно настроен для статической линковки:
CONFIG += static
Если вы используете плагины, добавьте:
CONFIG += static_plugins
Проверьте, что вы используете правильные версии библиотек. В Qt 6.10.0 static сборке библиотеки имеют суффикс _static:
-lQt6CoreStatic
-lQt6GuiStatic
-lQt6WidgetsStatic
Исправление путей библиотек
Добавьте правильные пути к статическим библиотекам в .pro файл:
# Пути к статическим библиотекам Qt 6.10.0
LIBS += -L"C:/Qt/6.10.0/mingw_64/lib"
Убедитесь, что пути не содержат пробелов, или заключите их в кавычки:
# Для путей с пробелами
LIBS += -L"C:/Program Files/Qt/6.10.0/mingw_64/lib"
Настройка .pro файла
Улучшите ваш .pro файл для static сборки Qt 6.10.0:
QT += core gui widgets
CONFIG += c++17 static
# Определения для static сборки
DEFINES += QT_STATIC_BUILD
# Пути к библиотекам (замените на ваши реальные пути)
win32 {
LIBS += -L"C:/Qt/6.10.0/mingw_64/lib"
LIBS += -lQt6CoreStatic -lQt6GuiStatic -lQt6WidgetsStatic
}
# Настройки развертывания
unix:!macx {
LIBS += -lpthread -ldl
}
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
else: win32: target.path = $$OUT_PWD/../bin
!isEmpty(target.path): INSTALLS += target
Проверка зависимостей
Проверьте, что все необходимые зависимости установлены и доступны:
- Проверьте наличие всех .lib файлов в каталоге lib Qt 6.10.0
- Убедитесь в правильности версий debug/release библиотек
- Проверьте зависимости сторонних библиотек, как упоминалось в Stack Overflow
Если вы используете OpenGL или другие модули, добавьте их в .pro файл:
QT += opengl
Другие возможные решения
-
Закройте запущенные экземпляры вашего приложения перед перекомпиляцией, как упоминалось в Stack Overflow
-
Проверьте права доступа к файлам библиотек
-
Очистите проект и пересоберите:
- В Qt Creator: Build → Clean Project
- Затем Build → Rebuild Project
-
Проверьте конфигурацию Kit в Qt Creator:
- Убедитесь, что выбран правильный компилятор
- Проверьте пути в настройках компилятора
-
Проверьте переменные окружения:
bashecho %PATH% echo %LIB%
Диагностика проблемы
Для точной диагностики выполните следующие шаги:
-
Проверьте полный лог компиляции - ищите сообщения об отсутствующих библиотеках
-
Используйте verbose режим сборки:
bashqmake -spec win32-g++ -v make verbose=1
-
Проверьте наличие всех необходимых библиотек:
- Qt6Core.lib
- Qt6Gui.lib
- Qt6Widgets.lib
- и другие зависимости
-
Сравните с рабочей конфигурацией Qt 6.9.2 - какие отличия в настройках?
-
Проверьте документацию Qt 6.10.0 на предмет изменений в static сборке, как упоминалось в Qt Forum.
Заключение
Ошибка collect2.exe: error: ld returned 1 exit status в Qt 6.10.0 static сборке обычно связана с:
- Неправильной настройкой статической линковки - добавьте
CONFIG += staticи используйте правильные имена библиотек - Проблемами с путями библиотек - проверьте корректность путей к .lib файлам
- Отсутствием необходимых модулей - убедитесь, что все используемые модули Qt правильно подключены
- Конфликтами версий - проверьте соответствие debug/release версий
Рекомендуется начать с проверки базовой настройки .pro файла для static сборки, затем逐步 добавлять необходимые модули и зависимости. Если проблема сохраняется, проверьте полные логи компиляции для более точной диагностики.
Источники
- What does “collect2: ld returned 1 exit status” mean? | Qt Forum
- QtCreator build returns collect2: ld returned exit status 1 - Stack Overflow
- Collect2.exe:-1: error: error: ld returned 1 exit status [SOLVED] | Qt Forum
- collect2: error: ld returned 1 exit status | Qt Centre
- Qt error cannot find -lQtCored collect2: ld returned … - Stack Overflow
- How to solve the error of collect2: ld returned 1 exit status - Stack Overflow
- Error collect2: ld returned 1 exit status with QT and opengl - Stack Overflow
- Can’t build any projet I get collect2:error:ld returned 1 exit status | Qt Forum
- Unable to get compiled code running due to “collect2: ld returned 1 exit status.” error - Stack Overflow
- Build Issue in Qt Creator: collect2: ld returned 1 exit status - Qt Creator Mailing List