powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / создание статической библиотеки и ошибка "The program has unexpectedly finished"
12 сообщений из 12, страница 1 из 1
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38589012
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Хочу создать и использовать статическую библиотеку в клиенте(функции для калькулятора).

Создал в creatore статическую библиотеку, получил 4 файла:
-stat_lib.pro
-stat_lib.h
-stat_lib_global.h
-stat_lib.cpp

В stat_lib.pro добавил DESTDIR += ../lib (По заданию в этом каталоге должна стать библиотека, но у меня ничего не появилось после сборки...)

В stat_lib.h описал экспортируемую функцию:


Код: plaintext
1.
int add(int, int);



В stat_lib.cpp определил экспортируемую функцию:


Код: plaintext
1.
2.
3.
4.
int add(int first_value, int second_value)
{
    return first_value + second_value;
}




Далее создал клиента на базе QMainWindow:

- в mainwindow.h включил #include "stat_lib.h"
- в проекте указал путь к .h файлу - INCLUDEPATH+= ../stat_lib и саму библиотеку LIBS+= ../lib/libstat_lib.a

В клиенте описал функцию сложение:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void MainWindow::on_add_clicked()
{
    QString first_value = ui->first_value->text();
    QString second_value = ui->second_value->text();
    int ifirst_value = first_value.toInt();
    int isecond_value = second_value.toInt();
    int result = add(ifirst_value, isecond_value);
    ui->result->setNum(result);
}



И теперь когда запускаю run клиента получаю ошибку:

Starting D:\Temp\C++\QT_labs\Client\debug\Client.exe...
The program has unexpectedly finished.
D:\Temp\C++\QT_labs\Client\debug\Client.exe crashed

Из-за чего это может происходить?
Спасибо.
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38589048
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

Это не из-за библиотеки.
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38589055
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
Код: plaintext
1.
int result = add(ifirst_value, isecond_value);


На этой строчке спотыкается. Что с ней не так?
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38589087
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

Не знаю. Пройди отладчиком, посмотри.

Также найди в сети пример проекта на qt про использованию статической библиотеки и сделай у себя как там.
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38589088
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

Какая у тебя платформа?
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38589379
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, qt 5.2.0 MinGW 32 bit
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38589633
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

тогда боюсь, что

автор LIBS+= ../lib/libstat_lib.a

неверно.
Могу ошибаться.
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38589665
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
тогда боюсь, что 

автор
LIBS+= ../lib/libstat_lib.a


неверно.



Почему? Я так подключаю свою библиотеку. А в проекте с библиотекой я написал так:
DESTDIR = ../lib

Только ошибка все равно остается=) Была правда проблема - тип у библиотеки сначала был shared library. Но я уже создал новые проекты с static library, но проблема осталась.
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38589750
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трудно сказать.

Но если бы проблема была в библиотеке, то оно бы не собиралось, а оно у тебя не работает.
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38591535
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался я со своими ошибками. Хочу выложить сюда алгоритм создания   клиента Qt/ статической библиотеки Qt . Может быть кому-то это поможет.

Создание библиотеки в QT creator

New project -> Libraries -> C++ Library -> Choose; Type - Statically Linked Library; Name - static_lib.Далее все next

После создания проекта для библиотеки для удобства нужно отключить теневую сборку: Project ->Shadow build->false

В библиотеки опишем функцию сложения. Описание класса, созданное wizardом по умолчанию в файлах проекта удаляем. Он нам не пригодится.

В static_lib.h объявляем функцию сложения: double add(double, double); В static_lib.cpp определяем функцию сложения:
Код: sql
1.
2.
3.
4.
double add(double first, double second)
{
    return first + second;
}

.
Собираем проект.

Редактируем файл static_lib.pro. Для удобства определяем каталог размещения библиотеки: : DESTDIR = ../lib. Собираем проект.

Библиотека готова, теперь создаем gui-клиента на qt


New project -> Applications -> Qt Widgets Application-> Choose; Name - client; Далее все next

После создания проекта для библиотеки для удобства нужно отключить теневую сборку: Project ->Shadow build->false

Создадим в дизайнере в форме два QLineEdit поля ввода значений(назовем их first и second),кнопку add и поле вывода QLabel(назовем result)

Напишем обработчик события для кнопки add: Правой кнопкой мыши на кнопке - go to slot - Clicked. В обработчике пишем код, где вызываем нашу функцию из библиотеки:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
void MainWindow::on_add_clicked()
{
    QString first = ui->first->text();
    QString second = ui->second->text();
    int ifirst = first.toInt();
    int isecond = second.toInt();
    int result = add(ifirst, isecond);
    ui->result->setNum(result);
}



Редактируем файл client.pro -
Код: sql
1.
2.
3.
INCLUDEPATH += ../static_lib #путь к хедеру библиотеки

LIBS += ../lib/libstatic_lib.a#путь к самой библиотеке.



Подключаем #include "static_lib.h" в mainwindow.cpp(в коде, где будем использовать функцию библиотеки)

Собираем проект, запускаем - проверяем =)
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38591662
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После создания проекта для библиотеки для удобства нужно отключить теневую сборку: Project ->Shadow build->false

На кой? Какая разница ?


Редактируем файл static_lib.pro. Для удобства определяем каталог размещения библиотеки: : DESTDIR = ../lib. Собираем проект.


Тоже шаг вовсе не обязательный.



После создания проекта для библиотеки для удобства нужно отключить теневую сборку: Project ->Shadow build->false

Чем она тебе так не угодила ?



Редактируем файл client.pro -
Код: sql
1.
2.
INCLUDEPATH += ../static_lib #путь к хедеру библиотеки
LIBS += ../lib/libstatic_lib.a#путь к самой библиотеке.




Тут можно было бы просто указать путь к другим каталогам, а не указывать их при создании библиотеки.
...
Рейтинг: 0 / 0
создание статической библиотеки и ошибка "The program has unexpectedly finished"
    #38592004
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПосле создания проекта для библиотеки для удобства нужно отключить теневую сборку: Project ->Shadow build->false
Да всем угодила=) просто нам объясняли на первых порах её отключать.

авторТут можно было бы просто указать путь к другим каталогам, а не указывать их при создании библиотеки.
ну да.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / создание статической библиотеки и ошибка "The program has unexpectedly finished"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]