Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2023, 16:36   #1
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию Как подключить библиотеку ncurses к проекту на Qt Creator ?

Я создал проект на Qt Creator 4.12.2 под именем NcursesTest в операционной системе Windows 10, в котором используется библиотека ncurses для работы с консольным окном.
Библиотеку ncurses я установил на мой компьютер с помощью программы MSYS2. После установки MSYS2 я вызвал MSYS MING32, в окне я ввёл команду
Цитата:
$ pacman –Suy
для обновления репозитория, затем я закрыл это окно с помощью команды exit, затем я снова вызвал MSYS MING32, в окне которого я ввёл
Цитата:
$ pacman –Ss ncurses
Для установки библиотеки ncurses.
После этого я то же самое сделал с MSYS MING64 – сперва ввёл в его окне
Цитата:
$ pacman –Suy
А затем, после закрытия этого окна с помощью команды exit, я заново вызвал MSYS MINGW64 и ввёл в его окне команду
Цитата:
$ pacman –Ss ncurses
В результате чего библиотека ncurses была установлена на мой комптьютер.

Файл mainwindow.cpp моего проекта:

Код:
#include “mainwindow.h”
#include “ui_mainwindow.h”
#include “ncurses.h”

MainWindow::MainWindow(QWidget *parent)
                            : QMainWindow(parent),
                           Ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete  ui;
}

void  MainWindow::on_pushButton_clicked()
// если была нажата кнопка “Выход”
{
    close();
}

void  MainWindow::on_pushButton_2_clicked()
// если была нажата кнопка “Тестировать”
{
    initscr();
    printw(“Hello world!\n”);
    refresh();
    getch();
    endwin();
}
В результате при компиляции проекта появляются сообщения об ошибках:

Цитата:
undefined reference to ‘initstr’
undefined reference to ‘printw’
undefined reference to ‘refresh’
undefined reference to ‘stdscr’
undefined reference to ‘wgetch’
undefined reference to ‘endwin’
Файл NcursesTest.pro выглядит следующим образом:

Цитата:
QT += core gui
greaterThan(QT_MAJOR_VERSION,4): QT+=widgets
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
main.cpp
mainwindow.cpp

HEADERS += \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/curses.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesapp.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesf.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesm.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesp.h \ 
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesw.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursslk.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/eti.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/etip.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/form.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/menu.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/nc_tparm.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/ncurses.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/ncurses_dll.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/ncurses_mingw.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/panel.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/term.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/term_entry.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/termcap.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/tic.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/unctrl.h \
mainwindow.h

FORMS += \
mainwindow.ui

INCLUDEPATH += /path/to/ncurses/headers
INCLUDEPATH += C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw

LIBS ++ -L/path/to/ncurses/library/-lncursesw

qnx: target.path = /tmpl/$${TARGET}/bin
else: unix:!android:target.path=/opt/$${TARGET}/bin
!isEmpty(target.path):INSTALLS+=tar get
Win32:CONFIG(release, debug|release): LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncursesw
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncursesw
else:unix: LIBS += -LC:/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw

DEPENDPATH += C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw
Как сделать так, чтобы у меня произошло правильное подключение библиотеки ncurses в мой проект? Как сделать так, чтобы моя программа нормально скомпилировалась и запустилась?
erslgoeirjh вне форума Ответить с цитированием
Старый 10.04.2023, 19:44   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от erslgoeirjh Посмотреть сообщение
INCLUDEPATH += /path/to/ncurses/headers
Например здесь исправить
waleri вне форума Ответить с цитированием
Старый 11.04.2023, 11:31   #3
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
INCLUDEPATH += /path/to/ncurses/headers

Например здесь исправить
На что исправить? На
Цитата:
INCLUDEPATH += /path/to/ncursesw
?
erslgoeirjh вне форума Ответить с цитированием
Старый 11.04.2023, 11:59   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Английский нихт фирштейн?
Там же написано /path/to/ncurses - путь до ncurses
Прописываете путь, где на вашем компьютере располагается ncurses
macomics вне форума Ответить с цитированием
Старый 13.04.2023, 17:02   #5
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Я изменил файл NcursesTest.pro:

Цитата:
QT += core gui
greaterThan(QT_MAJOR_VERSION,4): QT+=widgets
CONFIG += c++11
CONFIG += link_pkgconfig
CONFIG += ncursesw

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
main.cpp
mainwindow.cpp

HEADERS += \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/curses.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesapp.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesf.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesm.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesp.h \ 
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursesw.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/cursslk.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/eti.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/etip.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/form.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/menu.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/nc_tparm.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/ncurses.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/ncurses_dll.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/ncurses_mingw.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/panel.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/term.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/term_entry.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/termcap.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/tic.h \
C:/Qt/Qt5.12.9/Tools/mingw730_32/ opt/include/ncursesw/unctrl.h \
mainwindow.h

FORMS += \
mainwindow.ui

INCLUDEPATH += C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include
INCLUDEPATH += C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw
INCLUDEPATH += $$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include
INCLUDEPATH += $$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw

LIBS += -L$$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/libncurses.a
LIBS += -L$$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/libncursesw.a
LIBS += -L$$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/libncurses++w.a
LIBS += -L$$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/libncurses++w_g.a
LIBS += -L$$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/libncursesw_g.a

qnx: target.path = /tmpl/$${TARGET}/bin
else: unix:!android:target.path=/opt/$${TARGET}/bin
!isEmpty(target.path):INSTALLS+=tar get

Win32:CONFIG(release, debug|release): LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses.a
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses.a
else:unix: LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses.a

Win32:CONFIG(release, debug|release): LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncursesw.a
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncursesw.a
else:unix: LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncursesw.a

Win32:CONFIG(release, debug|release): LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses+w.a
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses+w.a
else:unix: LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses+w.a

Win32:CONFIG(release, debug|release): LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses+w_g.a
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses+w_g.a
else:unix: LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses+w_g.a

Win32:CONFIG(release, debug|release): LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncursesw_g.a
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncursesw_g.a
else:unix: LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncursesw_g.a

DEPENDPATH += C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include
DEPENDPATH += C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw
DEPENDPATH += C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib
DEPENDPATH += $$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include
DEPENDPATH += $$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw
DEPENDPATH += $$PWD/C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib
В файле mainwindow.cpp я написал:

Код:
#include "C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw/ncurses.h"
В результате чего заголовочный файл ncurses.h стал видеться из моего проекта (так как если написать #include "ncurses.h" или #include "ncursesw/ncurses.h" , то файл ncurses.h почему-то не видится из моего проекта).

Но при компиляции программы выдаются ошибки:

Цитата:
undefined reference to 'initscr'
undefined reference to 'printw'
undefined reference to 'refresh'
undefined reference to 'stdscr'
undefined reference to 'wgetch'
undefined reference to 'endwin'
Такое ощущение, что компилятор не видит библиотечные файлы libncurses.a, libncursesw.a, libncurses+w.a, libncurses+w_g.a, libncursesw_g.a .

Как исправить эту ошибку, как сделать так, чтобы компилятор увидел библиотечные файлы библиотеки ncurses?
erslgoeirjh вне форума Ответить с цитированием
Старый 14.04.2023, 07:01   #6
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от erslgoeirjh Посмотреть сообщение
LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/lncurses.a
если я правильно помню, то при указании полного пути (с файлом и расширением) к либе не нужно префикса -L

а при указании только пути нужен -L:
Код:
LIBS +=-LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib/
а при указании только файла нужен -l и не нужно расширение
Код:
LIBS +=-llncurses

Последний раз редактировалось Алексей1153; 14.04.2023 в 07:03.
Алексей1153 вне форума Ответить с цитированием
Старый 17.04.2023, 16:53   #7
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Я сделал изменения в файле NcursesTest.pro и mainwindow.cpp . В результате у меня получилось:

1) файл NcursesTest.pro:

Цитата:
QT += core gui

greater than(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
main.cpp
mainwindow.cpp

HEADERS += \
mainwindow.h

INCLUDEPATH += LC:\Qt\Qt5.12.9\Tools\mingw730_64\o pt\bin

FORMS += \
mainwindow.ui

unix|win32: LIB += -LC:/Qt/Qt5.12.9/Tools/mingw730_32/opt/lib -lncurses

INCLUDEPATH += C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw

DEPENDPATH += C:/Qt/Qt5.12.9/Tools/mingw730_32/opt/include/ncursesw
2) файл mainwindow.cpp:

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "ncurses.h"
 
MainWindow::MainWindow(QWidget *parent)
           :QMainWindow(parent),
           ui(new Ui::MainWindow)
{
    ui->setupui(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void  MainWindow::on_pushButton_clicked()
// если была нажата кнопка "Выход"
{
    close();
}
 
void  MainWindow::on_pushButton_2_clicked()
// если была нажата кнопка "Тестировать"
{
    initscr();
    printw("Hello world!\n");
    refresh();
    getch();
    endwin();
}
В результате чего у меня программа компилируется, запускается. При нажатии на кнопку "Тестировать" у меня появляется консольное окно, на котором отображена надпись Hello world! и переход на следующую строку.
Но только почему-то при нажатии какой-либо клавиши у меня это консольное окно не закрывается. Как сделать так, чтобы это консольное окно закрывалось?
erslgoeirjh вне форума Ответить с цитированием
Старый 18.04.2023, 11:19   #8
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

И ещё вопрос. Я добавил код в функцию void MainWindow:n_pushButton_2_clicked () :

Код:
void  MainWindow::on_pushButton_2_clicked()
// если была нажата кнопка "Тестировать"
{
    initscr();
    printw("Hello world!\n");
    refresh();
    printw("Enter first real number: ");
    refresh();
    scanw("%lf",&val1);
    printw("Enter first real number: ");
    refresh();
    scanw("%lf",&val2);
    val3 = val1 + val2;
    printw("Sum of two input values is: %f\n",val3);
    refresh();
    getch();
    endwin();
}
В результате чего в консольном окне у меня выводится:

Цитата:
Hello world!
Enter first real number:
Enter second real number:
Sum of two input numbers is: -2.000000
То есть ввод значений не осуществляется. Как сделать так, чтобы в консольном окне осуществлялся ввод значений?
erslgoeirjh вне форума Ответить с цитированием
Старый 18.04.2023, 18:04   #9
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от erslgoeirjh Посмотреть сообщение
Как сделать так, чтобы в консольном окне осуществлялся ввод значений
сделать консольное приложение
Алексей1153 вне форума Ответить с цитированием
Старый 19.04.2023, 14:59   #10
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
сделать консольное приложение
А из GUI-шного приложения это работать не будет?
erslgoeirjh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключить dll к проекту Fakov Общие вопросы Delphi 10 16.06.2018 16:01
подключить OpenCV к Qt Creator StartMis Qt и кроссплатформенное программирование С/С++ 0 14.03.2012 11:47
Как подключить .dll файл к проекту free6878 Помощь студентам 0 03.07.2011 14:33
VC++. Подключить DLL к проекту. TwiX Visual C++ 5 20.06.2011 01:46
Как подключить к проекту модуль ras.pas Михаил Юрьевич Общие вопросы Delphi 3 14.03.2009 15:45